12. april 2007 - 13:50Der er
35 kommentarer og 1 løsning
Er der en grænse for hvor mange MC'er man kan oprette ad gangen?
Hej eksperter!
Jeg sidder og skriver et spil, hvor spilleren styrer et fly, der så kan skyde fjender ned. Der er relativt mange partikkeleffekter: Røg efter flyet, fjenderne og missilerne man affyrer, eksplosioner og øvrige finesser. Alle effekterne indsættes med attachMovie til et ellers tomt MC i _root. Men: Når der er mere end 2-3 missiler samt spillerens eget fly på skærmen, vil Flash tilsyneladende ikke oprette flere MC'er. Der kommer ikke flere røghaler og nogle gange "eksploderer" missilerne inden de rammer målet. Hvorfor? Er der en grænse for hvor mange MC'er Flash kan håndtere? Jeg har talt op til omkring 100-200 ad gangen i spillet.
Virksomheder er på vej fra store sprogmodeller, der svarer på spørgsmål, til AI-agenter, der kan udføre opgaver på egen hånd. Det gør teknologien mere nyttig – og langt mere risikabel.
Det er ikke fordi de oprettes i samme dybde? Der er naturligvis et maks for hvor mange movieclips du kan kaste rundt, men jeg tror umiddelbart det er bestemt ved performance, nærmere end ved antal mc's?
(100-200 movieclips er ihvertfald ikke noget loft)
Altså, du attacher vel ikke alle samme sted? Du kan med fordel have 4-5 movieclips, der repræsenterer forskellige lag, og så igen attach'e inden i hver af disse. Det vil nok være en fordel :)
Synes godt om
Slettet bruger
12. april 2007 - 15:30#4
Jerp, Barklund, det har jeg tænkt på. Jeg har et lag til interaktive objekter, et lag til effekter, et lag til projektiler, et lag til baggrunden og et lag til interfacen. Og nej, mat, jeg bruger forskellige variationer af denne funktion:
var TEMP:String = new String("OBJECT"+_root.OVERLAY.getNextHighestDepth()); _root.OVERLAY.attachMovie("SMOKE_10x10", TEMP, _root.OVERLAY.getNextHighestDepth()); _root.OVERLAY[TEMP]._x = _x; _root.OVERLAY[TEMP]._y = _y; delete TEMP;
Hvad kan problemet være?
Synes godt om
Slettet bruger
12. april 2007 - 15:32#5
Eksempelfunktionen kaldes fra MC'et der udgør spillerens fly. Og larsholmgaard: Jeg kan da uploade en ... øh ... semibeta af spillet :) Skal lige have fundet et site at smide det ud på.
Mht. performance: Spillet forøger min pc's CPU-brug med 10% og hukommelse med 100 mb. Ikke meget, da jeg har en 1,7 gHz dual core processor og 2 gb ram, samt massere plads på harddisken... Men det tager Flash måske ikke højde for?
Synes godt om
Slettet bruger
12. april 2007 - 15:42#8
:)
Synes godt om
Slettet bruger
12. april 2007 - 15:53#9
Okaj, der er helt sikkert noget galt. Jeg har tjekket det hele - jeg har ingen fejl lavet. Flash må være skyld i følgende fejl: MC'erne bliver byttet ud. Eksplosioner opfører sig som missiler og missiler eksploderer ikke. Røg og ild forsvinder. Og alligevel: Ingen lag overhovedet.
Der er godt nok meget overflødig kode uden rigtig at gøre så meget... :)
og getNextHighestDepth() kan være farligt, med mindre du har 1000% styr på, hvad der kommer i det aktuelle movieclip.
Jeg ville have en tæller for hvert lag som wrappede ved for eksempel 100 (der er vel ikke mere end 100 symboler i samme lag på én gang?) og så ville det se ud som:
Ja, undskyld, men jeg må give dig ret... Du er en lille smule rusten ;) Du har reffereret til en variabel 'depth' et par gange. Mener du 'depths[layer]'?
nåja, der skulle være en var depth:Number = depths[layer]...
og OTHERLAY er bare et eksempel på et andet lag :)
Synes godt om
Slettet bruger
12. april 2007 - 16:35#19
Okaj :) Kan ikke lige få dit eksempel til at virke, men hvad skal det helt præcist gære? Bare oprette nye MC i et andet givet MC og sørge for at depth holdes under 100?
For det første abstraherer det hele skidtet med at skulle holde styr på dybder og den slags væk fra de steder, hvor du "blot" skal have oprettet nye symboler.. hvis nu du 10 forskellige steder opretter symboler, så ville du jo skulle rette alle steder, hvis du ville ændre metoden det blev gjort på.
For det andet, så sørger det for at der altid max er 100 movieclips i hvert lag. Om det virker eller ej, skal jeg ikke lige kunne sige, men det er ganske ligetil, så det skulle være til at forstå ideen bag og trace sig igennem for at få til at virke :)
Synes godt om
Slettet bruger
13. april 2007 - 07:51#21
Ok, det lyder jo fornuftigt. Jeg prøver mig lige lidt frem selv så, skriver nok tilbage i eftermiddag.
Synes godt om
Slettet bruger
13. april 2007 - 07:56#22
Forresten er 100 ikke nok... Rettere 2000.
Synes godt om
Slettet bruger
13. april 2007 - 08:54#23
Ups, der er noget jeg ikke forstår. Je ghar nu lavet en funktion der ... øh ... "virker". Desværre "virker" den delvist på root! Når jeg bruger:
class SYMBOLS {
private static var MAX:Number = new Number(100); private static var DEPTH:Array = new Array();
public static function ATTACH(_PARENT:String, _SYMBOL:String, _ARGUMENTS:Array):MovieClip { if (DEPTH[_PARENT]==undefined || DEPTH[_PARENT]>=MAX-1) { DEPTH[_PARENT] = 0; } else { DEPTH[_PARENT]++; } return _root[_PARENT].attachMovie(_SYMBOL, "SYMBOL"+DEPTH[_PARENT], DEPTH[_PARENT], _ARGUMENTS); }
SÅ! Glemte at skrive, da jeg uploadede betaen (sorry), men her en den fulde! http://www.maqhem.com/toke Det er kun en midlertidig placering. Jeg skal have købt et domæne selv...
Synes godt om
Ny brugerNybegynder
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.