09. august 2001 - 12:29Der er
16 kommentarer og 1 løsning
Scener/Load movie - og Variabler
Hej.
Jeg vil lige høre jeres synspunkter på følgende problem(er).
Jeg er igang med et spil, hvor der kommer til at være en level (med \"flere skærme\" på hver level), hvor hver \"skærm\" har en betragtelig kb størrelse.
Jeg har tænkt mig, før spillet starter, at loade grundgrafikken ind som skal bruges igennem hele spillet, som f.eks heltens og monstrenes animationer, og derefter loade skærm for skærm, eller måske flere sammenhængende skærme af gangen.
Men nu er jeg blevet lidt i tvivl om hvordan man kan stukturere det mest hensigtsmæssigt.
Som jeg ser det, står valget imellem at lave en loadmovie for hver skærm eller køre alt som een swf, og bruge interne flash-scener for hver skærm.
Problemet med loadmovie, er så vidt jeg ved, at mc\'et ikke bliver cachet, og at man skal loade igen når man skal fra skærm 2 og til skærm 1(som man har været på). Det ville vist også blive noget rod med variabel referencer til og fra det loadede mc + at man skulle dublikere Helt/monster mc ind i det loadede mc, som jeg slet ikke er sikker på man kan.
At bruge interne flash-scener(altså alt i en swf), virker umiddelbart mest fornuftigt på mig. Jeg har rodet med at overføre variabler fra en scene til en anden i en flashfilm, og kan dette egentlig lade sig gøre? Jeg har tænkt på at lade Javascript holde alle de vigtige variabler, som man gerne vil have med til næste scene som f.eks hitpoints, ammo osv.
Spørgsmålet er om man kan loade en swf delvist ind, og så \"stoppe\" indloadningen, for at senere starte den igen. Man kunne jo preloade til de første par scenes er inde, og så loade videre mens man spiller dem. Men ville det ikke indvirke på performance, at den står og loader i baggrunden?
Variabler hører til i samme timeline som de bliver deklareret. Hvis du har adgang til en timeline, så har du også adgang til dets variabler via den sædvanlige dot syntaks.
Hvis du gerne vil have variabler som skal eksistere uafhængigt af nogle timelines kan du gøre det ved at definere et objekt.
lad os sige at jeg gerne vil have en \'global\' variabel som skal hedde \"myVar\" som der skal være adgang til fra hvilken som helst timeline. Der gør jeg via denne deklaration:
Object.prototype.myVar = \"hello\"
Nu vil du så kunne se fra alle timelines
trace(\"myVar is \" + Object.prototype.myVar); //output vindue viser \"hello\"
Men angående loadning, hvis jeg nu har brugt et mc på scene 1, skal den så loade den ind igen hvis jeg bruger den i scene 2? Du snakkede jo om at lade mc\'erne ligge uden for synsfeltet, men når jeg skifter scene, så forsvinder de vel...
Dine scener har jo et Library til fælles. Så dine MC\'er behøver ikke at loade dem igen. Dog må du være opmærksom på at det er forskellige instancer af dit MC som bruges i forskellige scener. Hvis du gerne vil genbruge den samme instance i nye scener vil jeg tro at du skal gemme selve instance\'t på samme måde som variablerne, dvs inden du forlader den første scene
Object.prototype.myMC = ditMCinstance
Derefter i den nye scene
mitInstanceFraScene1 = Object.prototype.myMC
og placere den på scenen via actionScript.
Instancer \'lever\' så længe der er noget som refererer til dem. Så vi kan undgå at den bliver slettet ved at gemme den i variblen som overlever sceneskift.
Det er en måde at bevare instancen på, men det er langt nemmere at bruge forskellige frame segmenter i samme timeline så den samme MC instance bliver automatisk brugt.
Den skal ikke loade det ind igen. Det sørger du selvfølgelig for med en preloader. Du bør nemlig have n preloader til så store film. Denne loader så samtlige scener ind og så er problemet der slet ikke.
I know, men jeg ville gerne undgå at man skal preloade hele filmen på omkring en 2-3mb. :) (Ukontrollet brug af animationer i 8 retninger med 15 frames pr. retning i det lækre .png format) Så hellere preloade de første scener, og lade spilleren kommer i gang med dem.
>Geo \"...men det er langt nemmere at bruge forskellige frame segmenter i samme timeline så den samme MC instance bliver automatisk brugt.\"
Forslår du at man laver de forskellige \"skærme\" på een timeline, i stedet for at bruge interne scener?
Jamen hvis filen er så stor - så preloader du da bare mens brugeren ser på scene 1 og 2.
Og undskyld mig så lige, men hvis det er fordi du vil bruge 750 kb png billeder at filen bliver stor - Så kan der ikke være meget at se på din side og jeg ville formodenlig ikke komme igen. Måske aldrig få set den.
Det er jo ikke en side, men et spil. Jeg går ud fra at man kan komme til at spille efter en 400 til 500 kb...
Alt grafik er stort set lavet i 3dsmax og exporteret i png(med transparens), så der kommer perfekt antialiasing mellem objekter og baggrund. Selve scenen er et jpg på omkring en 25 kb.
Hele pointen med det her projekt, er at \"fyre den af\", og prøve at få det til at ligne et flash-spil så lidt som muligt.
Det bliver sandt nok, ikke en sag for en 56k\'er, men nu er jeg mest interesseret i at prøve at mase flash to the limit, og så lade dem der gider vente lidt, se noget lidt anderledes.
>nikolajdu Jeg tror det kommer an på hvordan man bruger billederne... Det er jo ikke store tungw bitmap tweening jeg bruger, som somregel sætter computeren på prøve...
Jeg sidder hovedsageligt og laver spillet på en 233 mhz bærbar, og der kører det fint..
jo... Nu kom der lige nye bekymringer, men jeg tror jeg vil prøve at lave alt i en timeline, opdelt i levels. Hvis ikke det går, bliver det vel i forskellige scener, med brug af Object.
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.