Avatar billede andersnielsen Nybegynder
27. februar 2003 - 11:26 Der er 6 kommentarer og
1 løsning

Loop en scene - det kører ikke for mig..? Haster!

Jeg er ved at lave et relativt simpelt spil.

I det spil vil jeg køre en scene igennem.
Når den er kørt igennem skal næsten helt det samme ske igen. Eneste forskel er, at score skal gå med videre, en variabel skal give et nyt random-tal og antal patroner skal gå tilbage til hvad det var før.

Problemet for mig er, at når scenen er kørt igennem og jeg laver en gotoAndPlay("game", 1); - så kører den ikke actionsscripts og movieclips igen.

Variablerne forbliver de samme, movieclips, kører ikke osv.
Med andre ord - man løber hurtigt tør for skud, man kan ikke score flere point, og det man skal skyde efter bliver ved med at komme samme sted (det var det random-tallet var til :-)

Så spørgsmålet er: Hvordan får jeg en scene til at starte forfra, hvor den stadig kører actionscripts og movieclips og altså beholder de i forvejen definerede variabler indtil jeg i scenen omdefinerer dem..?

Håber det giver mening, og håber at der er nogen, derude, der kan svare på mit spørgsmål.

Mvh.
Anders Nielsen
Avatar billede _k Nybegynder
27. februar 2003 - 12:23 #1
Det handler om hvordan du sætter og kalder dine variable. Når du har et spil, er det en rigtig god ide at samle alle "betydningsfulde" variable i tidslinjen på frame 1. Det kan f.eks. være tid, antal skud,liv osv. På den måde har du direkte adgang til dem, uden at skulle klikke dig ind i mc's osv.

Det kunsten går ud på, er at initiere dine variable i starten af spillet, og derefter lade dem være - altså kun ændre i dem når det er nødvendigt. Det betyder, at giver du din helt 3 liv og 100 skud til at starte med, må du for alt i verden ikke ende i frame 1 igen, for så får han sine 3 liv og 100 skud tilbage uanset hvor mange gange han er blevet ramt.

På den anden side, er det smart at kunne styre hvor mange liv han har tilbage og have adgang til at tælle ned, når skurkene får has på ham. Det kan du stadigvæk med _root.liv (eller hvad du nu har kaldt det). Tricket er altså at ændre i en variable som ikke senere bliver ændret ved et "uheld".

Dit problem lyder som om du får initieret dine variable én gang, hvorefter de hænger ved. Hvis du konsekvent sørger for at kalde de variable som ligger i Frame 1 (f.eks. igennem en onClipEvent(enterFrame) ), kan du frit ændre dem i Frame 1, og de VIL så betyde noget over det hele i dit spil.

Opsummerer lige: Saml ravl og krat i Frame 1. Kald variablerne i Frame 1 de steder hvor det er vigtigt (tælle skud og liv ned). Når du ændrer i Frame 1's variable, ændrer du HELE spillets variable.

Håber smøren gav mening...... :o)
Avatar billede andersnielsen Nybegynder
27. februar 2003 - 12:44 #2
Om ikke andet var det da et par hints at arbejde med til fremover.

Men jeg synes ikke det hjælper mig så meget i tilfældet her (kan self være jeg bare er sinke, men.. :-)

I dette tilfælde er spillet noget så banalt som lerdueskydning.
Der kommer altså en lerdue flyvende og man har to skud til at skyde den ned i.
Når det lykkes for en, får man et point.

Før lerduen kommer, er der en counter (movieclip), der tæller ned fra 3 og med attachmovie indsætter et movieclip i _root, med navnet motion0, motion1, motion2 etc, inden for intervallet af mit random tal.

Når lerduen er skudt ned eller fløjet forbi, skal scenen starte forfra. Bullets skal sættes til to igen, der vælges en ny, random motion path til lerduen og score skal forblive som den er. Til det har jeg i frame 1 indsat:

if (!score > 0) {
    score = 0;
}

Men altså - når lerduen er fløjet forbi første gang - eller skudt ned - så kan jeg ikke gennemskue hvad der er galt - om scenen bare ikke starter igen, eller om den starter igen, men 'noget blokerer' for at alt hvad der er i den bliver vist/udført.

F.eks. bliver countdown, som er et movieclip, indsat i frame1, ikke vist igen.
Lerduens motion-clip er derfor altid det samme (bliver indsat i slutningen af countdown).
- Og bullets bliver ikke sat til 2 igen, selvom der står bullets = 2; i actions i frame 1.

I slutningen af mit random-valgte motion-clip laver jeg en _root.gotoAndPlay("game", 1); - har også prøvet bare med _root.gotoAndPlay(1); og gotoAndPlay("game, 1);

Er det der den er gal måske?
Eller er der måske bare et eller andet andet, jeg skal gøre anderledes..?

Mvh.
Anders Nielsen
Avatar billede andersnielsen Nybegynder
27. februar 2003 - 12:46 #3
PS. Kan jeg ikke få dig til lige at skrive et simpelt eksempel på onClipEvent(enterframe) - er ikke 100% med på hvordan den bruges :-)

Tak.

/Anders
Avatar billede _k Nybegynder
27. februar 2003 - 13:10 #4
Vil næsten foreslå dig at lægge din .fla ud, så vi (de andre "eksperter") kan kigge i den. Hvis du ikke vil dele dit arbejde med resten af verden, kan du også bare sende den direkte til mig på: tomlau@it-c.dk

Det er vist noget af det som skal ses for at blive 100% forstået ;o)
Avatar billede mat Nybegynder
27. februar 2003 - 13:36 #5
onClipEvent (enterFrame) er en movieclip action som udføres i takt med frameraten af filmen - altså en slags løkke der kører så længe filmen kører.

prøv at smide det her på et movieclip og test.

onClipEvent (enterFrame) {
this._x += 5;
}

...aldrig mere tweens ;)

mvh mat :)
Avatar billede andersnielsen Nybegynder
27. februar 2003 - 14:23 #6
Jeg har fået det til at virke - men tak for hjælpen anyway :-)
Avatar billede _k Nybegynder
27. februar 2003 - 14:34 #7
Kewl - godt gået :o) .... og tak for points.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester