Flash-kod hjälp, skapa "stopp" i flashspel
Vi sitter ett gäng och kodar ett flashspel, i sidescroller-stil, och har ett litet problem.
Vi försöker skapa ett stopp så att våran figur stannar när den åker in i taket och "golvet". Vi har hittat lite kodexempel, men inte fått ut något klart ur det. Vi har hittat lösning om man har en konstant hastighet, men vi använder gravitation respektive power, vilket gör att det inte fungerar för oss.
Någon som kan peka på en bra guide eller ge oss en lösning?
En liten bild på vårat grundläggande koncept än så länge. Våran fågel ("Tottebirden") ska alltså inte kunna lämna skärmen.
Motivator's Lifestyle. Athletic Martyr. Build your own foundation.
Vi sitter ett gäng och kodar ett flashspel, i sidescroller-stil, och har ett litet problem.
Vi försöker skapa ett stopp så att våran figur stannar när den åker in i taket och "golvet". Vi har hittat lite kodexempel, men inte fått ut något klart ur det. Vi har hittat lösning om man har en konstant hastighet, men vi använder gravitation respektive power, vilket gör att det inte fungerar för oss.
Någon som kan peka på en bra guide eller ge oss en lösning?
En liten bild på vårat grundläggande koncept än så länge. Våran fågel ("Tottebirden") ska alltså inte kunna lämna skärmen.
Väldigt svårt att hjälpa när man inte vet hur eran kod ser ut.
Ni kan ju ha programmerat uppdateringsfunktionen hos fågeln på väldigt många olika sätt.
Men ett standardsätt att lösa det på är att, varje gång man uppdaterar fågelns position, även göra en check så att fågelns x och y-positionsvärden alltid är mindre/större än kanterna. Dvs att (fågel.x, fågel.y) alltid är inom den "rektangel" ni vill ha fågeln i, t.ex. skärmupplösningen eller något annat. Om han inte är inom kollisionsrektangeln ni valt så är det bara att flytta honom så att han är på insidan igen.
Have a good time!
Jag är med i teamet och detta är våran kod:
onClipEvent (load) {
power = 2.6;
yspeed = 0;
xspeed = 0;
friction = 0.5;
gravity = 1.3;
}
onClipEvent (enterFrame) {
if (Key.isDown(Key.SPACE)) {
yspeed -= power;
}
else if (Key.isDown(Key.UP)) {
yspeed -= power;
}
else if (Key.isDown(87)) {
yspeed -= power;
}
else if (Key.isDown(1)) {
yspeed -= power;
}
xspeed *= friction;
yspeed += gravity;
_y += yspeed;
_x += xspeed;
}
Nåt värt att nämna är också att vi använder ActionScript 2 och den här koden är lagd i karaktären.
Lägg bara till en if-sats i "onClipEvent (enterFrame)" som ser ut som följande:
onClipEvent (load) {
power = 2.6;
yspeed = 0;
xspeed = 0;
friction = 0.5;
gravity = 1.3;
}
onClipEvent (enterFrame) {
if (Key.isDown(Key.SPACE)) {
yspeed -= power;
}
else if (Key.isDown(Key.UP)) {
yspeed -= power;
}
else if (Key.isDown(87)) {
yspeed -= power;
}
else if (Key.isDown(1)) {
yspeed -= power;
}
xspeed *= friction;
yspeed += gravity;
if((_x + xspeed < screenwidth) && (_x + xspeed > 0))
{_x += xspeed;}
if((_y + yspeed < screenwidth) && (_y + yspeed > 0))
{_y += yspeed;}
}
Vet dock inte hur ni får tag på screenwidth/screensize ... kör ni fullscreen fungerar:
System.capabilities.screenResolutionX
System.capabilities.screenResolutionY
Annars har ni nog ställt in storleken själv och då är det ju bara att skicka storleken som en parameter när ni skapar fågelobjektet/instansen.
Have a good time!
Vi provade denna kodbit.. var det som du tänkte det?
onClipEvent (load) {
power = 2.6;
yspeed = 0;
xspeed = 0;
friction = 0.5;
gravity = 1.3;
}
onClipEvent (enterFrame) {
if (Key.isDown(Key.SPACE)) {
yspeed -= power;
}
else if (Key.isDown(Key.UP)) {
yspeed -= power;
}
else if (Key.isDown(87)) {
yspeed -= power;
}
else if (Key.isDown(1)) {
yspeed -= power;
}
xspeed *= friction;
yspeed += gravity;
if((_x + xspeed < System.capabilities.screenResolutionX) && (_x + xspeed > 0))
{_x += xspeed;}
if((_y + yspeed < System.capabilities.screenResolutionY) && (_y + yspeed > 0))
{_y += yspeed;}
}
Den koden gav dessa fel:
Line 27 Syntax Error
Line 28 Statement must appear within on/onClipEvent Handler
Line 29 Unexpected '}' encountered
Skulle du kunna förklara lite mer vad olika delar av koden gör? Vore väldigt snällt!
Vi provade denna kodbit.. var det som du tänkte det?
onClipEvent (load) {
power = 2.6;
yspeed = 0;
xspeed = 0;
friction = 0.5;
gravity = 1.3;
}
onClipEvent (enterFrame) {
if (Key.isDown(Key.SPACE)) {
yspeed -= power;
}
else if (Key.isDown(Key.UP)) {
yspeed -= power;
}
else if (Key.isDown(87)) {
yspeed -= power;
}
else if (Key.isDown(1)) {
yspeed -= power;
}
xspeed *= friction;
yspeed += gravity;
if((_x + xspeed < System.capabilities.screenResolutionX) && (_x + xspeed > 0))
{_x += xspeed;}
if((_y + yspeed < System.capabilities.screenResolutionY) && (_y + yspeed > 0))
{_y += yspeed;}
}
Den koden gav dessa fel:
Line 27 Syntax Error
Line 28 Statement must appear within on/onClipEvent Handler
Line 29 Unexpected '}' encountered
Skulle du kunna förklara lite mer vad olika delar av koden gör? Vore väldigt snällt!
Istället för System.capabilities.screenResolutionY testa bara några olika tal, t.ex. 400 eller 500 för att se vad som händer.
Felen ni fått indikerar på att det saknas { eller } någonstans, eventuellt att parenteserna är fel.
Jag tycker koden är ganska självförklarande. Vad är det ni vill ha förklarat?
Specificera så hjälper jag mer än gärna till.
Have a good time!
Problemet löstes genom att ta bort hålet framför den andra
if((_y + yspeed < System.capabilities.screenResolutionY)
Problemlösning på hög nivå!
Tilläggas kanske bör att vi är helt gröna på Flash tills för ett par veckor sen, vi har alltså inte den kunskapen än att kunna se typiska fel så snart.
Motivator's Lifestyle. Athletic Martyr. Build your own foundation.
Vi lyckades fixa ett "tak" på spelet men nu måste vi fixa golvet och vi har stött på ett problem när vi försökte programmera golvet. Nämligen att när karaktären nuddar "golvet" så hoppar den upp högst upp istället för att stanna där nere... Kan någon ge oss lite tips på vad som är fel i våran kod? Vi skulle också vilja ha en funktion som gör att när vi trycker på en av styrknapparna så startar en ljudfil.
onClipEvent (load) {
timer = 0;
power = 2.6;
yspeed = 0;
gravity = 1.3;
}
onClipEvent (enterFrame) {
if (Key.isDown(Key.SPACE)) {
yspeed -= power;
}
else if (Key.isDown(Key.UP)) {
yspeed -= power;
}
else if (Key.isDown(87)) {
yspeed -= power;
}
else if (Key.isDown(1)) {
yspeed -= power;
}
yspeed += gravity;
_y += yspeed;
if (_root.bird.hitTest(_root.wall_up)){
{yspeed= -yspeed;
_y = 61;
if (timer < 35)
{
power=0;
timer++;
}
if (timer ==36) {timer = 0;}
power = 2.6;
}
}
if (_root.bird.hitTest(_root.wall_down)){
{yspeed= -yspeed;
_y = 349;
if (timer < 35)
{
power=0;
timer++;
}
if (timer ==36) {timer = 0;}
power = 2.6;
}}
}