Zurück   Flashforum > Flash > ActionScript > ActionScript 3

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 29-11-2011, 15:08   #1 (permalink)
Neuer User
 
Registriert seit: Jan 2007
Beiträge: 59
Lightbulb Performance Optimierung Snow-Script

Hi Folks,

ich habe ein simples Snow-Script geschrieben, jede ms fällt eine Flocke Schnee vom Himmel. Auf der Stage gibt es eine "Hütte" und der Schnee bleibt auf dem Dach liegen.

Vom Ablauf läuft das bei mir (wie in den meisten anderen Snow-Skripten auch):
- jede Flocke hat ein Event.ENTER_FRAME und lässt die Flocke fallen bis sie entweder außerhalb der Bühne ist oder mit dem Dach in Berührung kommt
Code:
dach.hitTestPoint(flockeX,flockY,true);
- wenn der Hit-Test erfolgreich war, füge ich die Flocke zum Dach hinzu:
Code:
dach.addChild(flocke);
(dadurch bleibt der Schnee auch liegen und wird mehr)
- das klappt alles wie gewünscht
- Umso länger das Skript läuft, umso mehr Schnee/Child-Elemente enthält das Dach und irgendwann wird das ganze ziemlich langsam
- Aus Performancegründen würde ich daher gern einen Cache einbauen
- Something like: Immer wenn "dach" 100 Kinder hat, speichere den Inhalt als Bitmap, entferne alle Kinder und zeige nur das Bitmap

Mein Ansatz ging bisher in diese Richtung (doch das funktioniert leider nicht ;-)

Code:
if(dach.numChildren%100==0){
dach.cacheAsBitmap = true;
var bitmapData:BitmapData = dach.bitmapData;
trace(bitmapData); //null
}
Hat jemand soetwas ähnliches schon mal probiert und einen Lösungsansatz für mich?
flash-rockt ist offline   Mit Zitat antworten
Alt 29-11-2011, 15:11   #2 (permalink)
Neuer User
 
Benutzerbild von padavan
 
Registriert seit: Apr 2002
Beiträge: 496
du musst dir den MovieClip in ein Bitmap zeichen

einfach: bmd.draw(mc);

aber zur Performance:
löscht du auch alle ENTERFRAME der "fertigen" flocken
und löscht du auch die Objekte außerhalb des screens?
__________________
Grafik - Webdesign - Programmierung - www.thsc.at
Adventkalender 2011 advent.wien.info/de
Jobspace - Universum der Lehrstellen www.jobspace.at

Geändert von padavan (29-11-2011 um 15:14 Uhr)
padavan ist offline   Mit Zitat antworten
Alt 29-11-2011, 15:47   #3 (permalink)
Neuer User
 
Registriert seit: Jan 2007
Beiträge: 59
Hi padavan,

das probiere ich gleich aus.

Der ENTER_FRAME und das Child wird bisher so entfernt:

Code:
if (flake.x>stage.stageWidth || flake.x<0 || flake.y>stage.stageHeight) {
flake.removeEventListener(Event.ENTER_FRAME,moveMe);
removeChild(flake);
}
flash-rockt ist offline   Mit Zitat antworten
Alt 29-11-2011, 15:58   #4 (permalink)
Keine Panik
 
Registriert seit: Apr 2010
Ort: Düsseldorf (im ernst)
Beiträge: 1.868
Zitat:
Zitat von flash-rockt Beitrag anzeigen
- jede Flocke hat ein Event.ENTER_FRAME
so, das ist der erste Performance-Killer. mach einen einzigen ENTER_FRAME-loop, pack alle MCs in ein Array, und arbeite alle Flocken in einer Schleife ab.

Zitat:
Zitat von flash-rockt Beitrag anzeigen
- wenn der Hit-Test erfolgreich war, füge ich die Flocke zum Dach hinzu:
Code:
dach.addChild(flocke);
(dadurch bleibt der Schnee auch liegen und wird mehr)
- das klappt alles wie gewünscht
- Umso länger das Skript läuft, umso mehr Schnee/Child-Elemente enthält das Dach und irgendwann wird das ganze ziemlich langsam
richtig, das ist der nächste performace-killer. je mehr Vektoren Flash pro Frame berechnen muss, desto langsamer wird es.


Zitat:
Zitat von flash-rockt Beitrag anzeigen
- Aus Performancegründen würde ich daher gern einen Cache einbauen
- Something like: Immer wenn "dach" 100 Kinder hat, speichere den Inhalt als Bitmap, entferne alle Kinder und zeige nur das Bitmap
perfekter Ansatz, aber wieso willst du die flocken so spät erst in das BD zeichen?
füg sie garnicht, zum dach hinzu, sondern zeichne sie direkt in das BD

Zitat:
Zitat von flash-rockt Beitrag anzeigen
wenn der Hit-Test erfolgreich war, füge ich die Flocke zum Dach hinzu
...
var bitmapData:BitmapData = dach.bitmapData;
was ist dach denn eigentlich? ein Sprite oder ein Bitmap? Bitmaps haben keine Kindelemente, Sprites keine eigenschaft bitmapData, also was ist es denn nu?
__________________
greetz Thomas

plz RTFM & Coding Conventions
thomas_E ist gerade online   Mit Zitat antworten
Alt 01-12-2011, 14:31   #5 (permalink)
Koda ;)
 
Benutzerbild von badnoob
 
Registriert seit: Oct 2010
Ort: Hannover
Beiträge: 213
hittestpoint ist in der regel auch nicht die allerschnellste variante, da sie sehr genau arbeitet.
wenn es dir von der genauigkeit her reicht, koenntest du eine eigene abfrage erstellen, die jeweils nur die aeusseren ecken der flocke prueft.
badnoob ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Stichworte
bitmap, cache

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Fullsize Video Performance Optimierung flash-rockt ActionScript 3 13 16-07-2011 11:25
Flex Website - Performance Optimierung flash-rockt Flex allgemein 5 26-11-2010 05:08
Performance-Optimierung bamboocha Softwarearchitektur und Entwurfsmuster 25 20-01-2008 16:47
performance optimierung triger23 Spielkonzepte und Spieleprogrammierung 3 09-08-2007 16:19
script optimierung totty38 ActionScript 1 2 22-10-2004 10:34


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:29 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele