Zadejte hledaný výraz...

Optimalizace flashe (AS3)

qye
verified
rating uzivatele
(17 hodnocení)
20. 6. 2011 17:37:44
Ahoj, nemáte nějaké tipy jak urychlit flash aplikaci psanou v actionscriptu3? Pracuji s obrázky, ext. swf, mp3, timeouty a TweenMaxem a nejede to optimálně rychle.
Většinu jsem dál cacheovat jako bitmapy a upravuji teď nejčastěji spouštěné sekvence kódu.
Nemáte nějaké tipy? Třeba odkazy nebo konkrétní věci?
Moc děkuji za jakýkoli tip
20. 6. 2011 17:37:44
https://webtrh.cz/diskuse/optimalizace-flashe-as3/#reply647332
nailos
verified
rating uzivatele
21. 6. 2011 09:26:43
Ahoj, nevím sice jak to máš napsané, tak snad pomůžu. Já dělám hry, vystačím si s game loop smyčkou, používám bitmapy které jsou nejrychlejší, vyhýbám se tween efektům, dělám si svoje...
Vektorové objekty se vyplatí cachovat jako bitmapy jen pokud to nejsou animace. Pokud jde o animaci, je lepší nechat to jako MovieClip.
U graf. objektů jsou strašně pomalé filtry(Glow apod.) Pokud jich máš na objektu hodně, zredukuj je, nebo úplně vyhoď. Pokud je chceš použít, předrenderuj obrázek i s filtry do bitmapy. Takhle si můžeš vytvořit i vlastní MovieClip třídu(předrenderuješ snímky, sám je budeš zobrazovat na scénu...)
Tween efekty taky hodně zpomalují, zredukuj je.
Samozřejmě můžeš nastavit kvalitu flash videa na střední, ale to asi nechceš.
Jak moc často vytváříš objekty(jakékoliv, ať Sprite, MovieClip...)? Tvorba objektů je časově strašně náročná a pokud např. v každém framu tvoříš nové a nové objekty, dost se to spomalí. Na to jsem používal ObjectPool - zkráceně, jde o pole předvytvořených objektů, které mají nějaký flag typu active. Ve chvíli kdy potřebuješ nový objekt, místo abys dělal new Object(), vezmeš z pole neaktivní, a zavoláš jen Object.set(nějaké hodnoty).
Tímto si nejsem moc jist, jak to funguje ve flashi, ale tuším že i mp3 ve vysoké kvalitě dost zatěžuje výkon. Zkus ho přeuložit do nižší kvality.
No a pak jsou ještě klasické triky jak optimalizovat - místo volání funkcí je přímo vložit do smyčky, nepoužívat ve for cyklech array.length() apod, používat lokální proměnné/objekty... Tipů je spousta, dá se to snadno vygooglit.
www.aimia.cz
21. 6. 2011 09:26:43
https://webtrh.cz/diskuse/optimalizace-flashe-as3/#reply647331
qye
verified
rating uzivatele
(17 hodnocení)
21. 6. 2011 10:53:49
děkuji moc, nové objekty tvořím stále nové a nové.. dá se říci, že nad 50 za minutu.. ikdyž vždy vypadají skoro stejně a mění se jen text.. když si udělám ObjectPool myslíš, že se to znatelně zrychlí?
Ten datapool jsem nějak podobně jak popisuješ chtěl vytvořit na multimedia a další data, na objekty mě to nenapadlo, jen jsem od toho upustil protože mi nešlo kopírovat objekty, vždy se kopírovaly jen reference, na každá objekd jsem aplikoval spoustu funkcí a filtrů a než bych ho použil znovu tak bych musel přenastavit vše do východních pozic a to mi přišlo efektivnější ho vytvořit znovu. Ale kdybys mi poradil jak zkopírovat objekt, tak aby neměl žádnou vazbu na předchozí, moc by mi to pomohlo a mohl bych udělat tyto datapooly.
21. 6. 2011 10:53:49
https://webtrh.cz/diskuse/optimalizace-flashe-as3/#reply647330
nailos
verified
rating uzivatele
22. 6. 2011 09:51:21
Vytvoření objektů je hodně náročné na výkon(ale ne zas tak náročné jak zobrazení grafických objektů). Ale tvorba 50obj/min není zas tak moc. Zkopírovat objekt taky neumím. Mě stačila jednoduchá set() funkce, měnil jsem jen pár hodnot.
U tebe bude nejspíš problém v množství grafických objektů. Pokud máš hodně filtrů, nebude ani tak problém v inicializaci filtrů, jako spíš v jejich aplikování. Vpodstatě se každý snímek vykresli MovieClip, na něj se aplikují všechny filtry a až pak se vykreslí. Jak jsem psal posledně, pokud můžeš, předvytvoř si bitmapy s filtrem a zobrazuj přímo je(u bitmapy můžeš dělat clone(), takže bys v set metodě místo aplikování filtru mohl rovnou použít clone()-pokud jde o statický objekt).
Píšeš že měníš i text - určitě používáš Antialiasing, to taky dost zpomaluje, taky bych to předrenderoval.
No ale celkově, flash, jako cokoliv má své limity, takže pokud se pokoušíš animovat tisíce objektů, na každém několik filtrů..., tak to bude vždy pomalé. Nemůžeš třeba zmenšit plochu, na které se vykresluje? Něco jako přidat nahoru, dolů nějaký panel, tím zmenšíš oblast která se překresluje každý frame...
http://www.aimia.cz
22. 6. 2011 09:51:21
https://webtrh.cz/diskuse/optimalizace-flashe-as3/#reply647329
Pro odpověď se přihlašte.
Přihlásit