Gå til innhold

Flashspill med flere levler. Stopp fungerer ikke


Anbefalte innlegg

Hei, jeg holder på å lage mitt første flash spill, men mitt første forsøk viste seg å bli for rotete til å kunne legge til mange levler. Derfor tester jeg ut det på ett enkelt nytt spill for å lære meg hvordan jeg skal få det til å fungere.

 

Når jeg når mål kommer det opp en tekst man kan trykke på for å gå til neste level. Problemet er at den ikke går til neste level men til siste selv om jeg har lagt til stop(); på level 2.

På teksten bruker jeg

 

 

 

var nextLevel = nextLevel

nextLevel.alpha = 0.00 // Nei, dette fungerer ikke bra nok ettersom du bare kan trykke på rett plassering for å gå videre


if (circle_mc.hitTestObject(platforms.goal1))
{
	nextLevel.alpha = 1.00
	nextLevel.addEventListener (MouseEvent.CLICK, nextLevel1);

function nextLevel1(event:MouseEvent):void
{
platforms.nextFrame(); //SKAL gå til neste level her (nummer 2 i det laget) i stedet går den til den siste som er nummer 3
stop();
}





}

 

 

 

Legger ved fla filen så dere kan se på hva som er feil TestGame.rar

 

Noen som kan hjelpe?

Lenke til kommentar
Videoannonse
Annonse

Lastet det ned å prøvde ulike løsninger, men fungerte ikke det heller.

Ser ut som du har gjort noe som på en måte overskrider det den skal gjøre. Du kan f.eks prøve å bruke gotoAndStop(frame)

hvor du bruker da currentFrame+1 som verdi inni der.

 

Lykke til videre med å finne ut hva som er feilen da :)

 

- Molty

Lenke til kommentar

Takker

 

Det gikk ikke med currentframe+1 nei :(

 

Har prøvd å finne en løsning lenge men fant ingen :(

 

sån koden din er satt opp nå legger du konstant til nye event listenere så lenge karakteren hit-testen er true. problemet kan enkelt løses ved å flytte nextLevel.addEventListener (MouseEvent.CLICK, nextLevel1) ut av MoveCircle funksjonen.

 

her er den fiksa koden. Jeg har også endra alpha = 0 og alpha = 1 til visible = false og visible = true, da dette er en bedre måte å skru av og på synligheten av et symbol.

 

stop();
import flash.events.KeyboardEvent;
import flash.events.Event;
import flash.display.BlendMode;
import flash.display.MovieClip;



var KeyThatsPressed:uint;
var rightKeysDown:Boolean = false;
var leftKeysDown:Boolean =false;
var upKeysDown:Boolean = false;
var downKeysDown:Boolean = false;

var gravity:Number =1;
var yVelocity:Number=0;
var canJump:Boolean=false;

stage.addEventListener(KeyboardEvent.KEY_DOWN, PressAKey);
stage.addEventListener(KeyboardEvent.KEY_UP, ReleaseAKey);



function PressAKey(event:KeyboardEvent):void
{
if(event.keyCode == Keyboard.RIGHT)
{
	rightKeysDown = true;

}
	if(event.keyCode == Keyboard.LEFT)
{
	leftKeysDown = true;

}	if(event.keyCode == Keyboard.UP)
{
	upKeysDown = true;

}	if(event.keyCode == Keyboard.DOWN)
{
	downKeysDown = true;

}
}

function ReleaseAKey(event:KeyboardEvent):void
{ 
if(event.keyCode == Keyboard.RIGHT)
{
	rightKeysDown = false;

}
	if(event.keyCode == Keyboard.LEFT)
{
	leftKeysDown = false;

}	if(event.keyCode == Keyboard.UP)
{
	upKeysDown = false;

}	if(event.keyCode == Keyboard.DOWN)
{
	downKeysDown = false;

}
}

circle_mc.addEventListener(Event.ENTER_FRAME, movecircle);
nextLevel.addEventListener (MouseEvent.CLICK, nextLevel1);

function movecircle(event:Event):void
{
if(rightKeysDown)
{
	circle_mc.x+= 5;
}
if(leftKeysDown)
{
	circle_mc.x-= 5;
}
if(upKeysDown && canJump)
{
yVelocity=-15;
canJump = false;
}
yVelocity +=gravity;

if(! platforms.plattform.hitTestPoint(circle_mc.x, circle_mc.y,true))
{
	circle_mc.y+=yVelocity;
}
if(yVelocity > 20)
{
	yVelocity=20;
}




for (var i:int = 0;i<10;i++)
{
	if(platforms.plattform.hitTestPoint(circle_mc.x, circle_mc.y, true))
	{
		circle_mc.y--;
		yVelocity = 0;
		canJump=true;
	}
}





var nextLevel = nextLevel

nextLevel.visible = false // gjennomsiktighet, 0.25 betyr viser 25 %


if (circle_mc.hitTestObject(platforms.goal1))
{
	nextLevel.visible = true

}
}

function nextLevel1(event:MouseEvent):void
{
platforms.nextFrame();
stop();
}

 

  • Liker 1
Lenke til kommentar

Jeg lurer på enda en ting: Når jeg lager en ny bane må alt som er med i koden på første bane være med på de andre banene. Om jeg for eksempel fjerner målet på siste bane får jeg opp massevis av denne meldingen helt til jeg skrur av igjen.

 

 

TypeError: Error #2007: Parameter hitTestObject must be non-null.

at flash.display::DisplayObject/_hitTest()

at flash.display::DisplayObject/hitTestObject()

at TestGame_fla::MainTimeline/movecircle()

 

 

Siste bane skal jo ikke inneholde ett mål som leder til neste bilde, men ett mål med en annen funksjon av ett eller annet slag.

Lenke til kommentar

Da må du ta en sjekk om du har kommet til siste bane. Dette kan gjøres ved å bruke "platforms.totalFrame"

husker ikke om du må ha (); på slutten der eller ikke. Prøv begge.

 

Og hvis da platforms.currentFrame == platforms.totalFrame, så skal den ikke gå til nextframe

  • Liker 1
Lenke til kommentar

Jeg legger inn

 



function nextLevel1(event:MouseEvent):void
{
if (platforms.currentFrame == platforms.totalFrames)
{
circle_mc.removeEventListener(Event.ENTER_FRAME, movecircle);
nextLevel.removeEventListener (MouseEvent.CLICK, nextLevel1);
	gotoAndStop(2)

}	
else
       platforms.nextFrame();
	circle_mc.x = 60 
       stop();
}

 

Det fungerer, jeg blir sendt til bilde 2 når jeg når jeg klarer siste level, men i output vinduet får jeg dette feilen:

 

 

 

 

 

TypeError: Error #1009: Cannot access a property or method of a null object reference.

at TestGame_fla::MainTimeline/nextLevel1()

 

 

EDIT: Når jeg nå prøvde med labels istedenfor : gotoAndStop("menu") fikk jeg ikke opp noen feilmelding av en eller annen grunn

Endret av Pettersenper
Lenke til kommentar

Nei, det fungerte visst ikke likevel. Den går til neste bilde på platforms bildet (som er game over) i stedet for å gå til parent og til meny

 

 


function nextLevel1(event:MouseEvent):void
{
        if (platforms.currentFrame == platforms.totalFrames)
       {
	circle_mc.removeEventListener(Event.ENTER_FRAME, movecircle);
	nextLevel.removeEventListener (MouseEvent.CLICK, nextLevel1);
       gotoAndStop("menu")
	}	
else
{
       platforms.nextFrame();
	circle_mc.x = 60 
       stop();
}
}

 

Lenke til kommentar
  • 2 uker senere...

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...