1&1 DSL
Flashhilfe.de - Flash Community

performance problem Drawing API [Flash 10]

Forum > ActionScript 3.0 > performance problem Drawing API

 


AntwortenRegistrieren Seite1 2 3  

 30.12.2009, 19:23 
Benutzerbild von longCrew
Beiträge: 380
Wohnort: München, Berlin
Registriert: Apr 2009

performance problem Drawing API
hallo leute


wie kann ich die perfomance verbessern???
ich male ein paar partile like folgeden code

ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
var color:Number = 0x0000FF;
            
            particles = new Array();
            for (var j:int = 0; j < 600; j++)
            {
               //color += 0x333333;
               var particle:Sprite = new Sprite();
               particle.graphics.lineStyle(0.5, 0x000066);
               //color += 0x33FF33;
               particle.graphics.beginFill(color, 0.75);
               particle.graphics.drawCircle( 10 ,10, Math.random()*0.5);
               particle.graphics.endFill();
               /* particle.x += 50;
               particle.y += 50; */

               particle.x = Math.random() * UIcompnent.width;
               particle.y = Math.random() * UIcompnent.height;
               
               
               /* var blur:BlurFilter = new BlurFilter(5,5,3);
               var filters:Array = new Array();
               filters.push(blur);
               particle.filters = filters; */

               
               
            
               //UIcompnent.addChild(particle);
               particles.push(particle);
               
               
                  
               container.addChild(particle);
               container.x = Math.random();
               container.y = Math.random();
               container.width = 0;
               container.height = 0;
         
            }//end for-schleife
         


meine cpu geht mir da ein bisschen zu hoch ... hab gehört das durch bitmap umwandlung die performance rutner geht...

hat jemand von euch tipps für mich wie ich meine performance verbesseren kann???

bin um jeden rat froh:)

mfg
Die Lösung ist: das Suchen.
LongCrew = 2 people
 30.12.2009, 19:36Re1
Benutzerbild von badskillFlashhilfe.de Moderator
Beiträge: 5285
Wohnort: Bernau (bei Berlin)
Registriert: Nov 2002

Für was soll das gut sein?
ActionScript:
1
2
3
4
container.x = Math.random();
container.y = Math.random();
container.width = 0;
container.height = 0;
 30.12.2009, 19:40Re2
Benutzerbild von longCrew
Beiträge: 380
Wohnort: München, Berlin
Registriert: Apr 2009

Themenautor/in

is fürn nen Tween;)
hab den teil nicht gepostet, das Math.random damit die particles irgendow auftauchen;)


bl0ß wie schaffe ich es das es mir die cpu nicht zerreisst muss noch mehr "malen"

mit cacheAsBitmap bloß wie stelle ich das an
container.caseAsBitmap ???

mfg
Die Lösung ist: das Suchen.
LongCrew = 2 people
 
nicht sichtbar bei eingeloggten Mitgliedern
 30.12.2009, 19:47Re3
Benutzerbild von badskillFlashhilfe.de Moderator
Beiträge: 5285
Wohnort: Bernau (bei Berlin)
Registriert: Nov 2002

Macht für mich dennoch keinen Sinn. Ob mit oder ohne Tween. Math.random() erzeugt eine Zahl zwischen 0 und 1. Du bewegst also den Container zwischen den Werten.
Und Breite und Höhe auf 0 und das in jedem Schleifendurchlauf entzieht sich auch meinem Verständnis.

hab den teil nicht gepostet,
Heisst das, in der Schleife steht noch mehr und du hast es nicht gepostet weil...?

Die Schleife, so wie sie ist, läuft bei mir schnell durch ohne das die CPU was davon bemerkt.
 30.12.2009, 19:56Re4
Benutzerbild von longCrew
Beiträge: 380
Wohnort: München, Berlin
Registriert: Apr 2009

Themenautor/in

ja das
ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
   
            var blur:BlurFilter = new BlurFilter(5,5,3);
            var shadowFilt:DropShadowFilter = new DropShadowFilter(10,45,0x999999,1.0, 5,5);
            var filters:Array = new Array();
            filters.push(blur);
            filters.push(shadowFilt);
            
            container.filters = filters;
            
            kugel.filters = filters;
            
            
         UIcompnent.addChild(container);
         
         var endTween:Function = function():void{
            container.filters = null;   
            trace("hi");
            }
         
         Tweener.addTween(container, {height:Math.random()*400, width:400, time:2, transition:"easeInSine", onComplete:endTween});
      


wann wende ich denn eigtl CachAsBitmap an das soll doch eigtl die performance verbesser... hab gelesen das es bei filtern angwendet wird.
es fkt so das mein bild was nicht geändert wird nicht nochmal gezeichnet wird sonden zwgespeichert oder?

mfg
Die Lösung ist: das Suchen.
LongCrew = 2 people
 30.12.2009, 20:02Re5
Benutzerbild von badskillFlashhilfe.de Moderator
Beiträge: 5285
Wohnort: Bernau (bei Berlin)
Registriert: Nov 2002

Das steht mit in der Schleife?
Du erstellst 600 mal dieses ganze Filter-Gedöns und rufst 600 mal Tweener.addTween auf?
Wozu?
So wie ich das sehe, geht es doch in der Schleife nur um das erstellen der Partikel. Alles andere gehört da nicht rein.

cacheAsBitmap ist in erster Linie dazu gedacht, komplexe Vektorgrafiken als Bitmap-Abbild in den Arbeitsspeicher zu legen um die Performance zu verbessern.
Es ist kein Allheilmittel, welches man immer anwenden kann.
 
nicht sichtbar bei eingeloggten Mitgliedern1&1 Webhosting
 30.12.2009, 20:11Re6
Benutzerbild von longCrew
Beiträge: 380
Wohnort: München, Berlin
Registriert: Apr 2009

Themenautor/in

ne das steht außerhalb der schleife also so:

ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
particles = new Array();
            for (var j:int = 0; j < 600; j++)
            {
              //....
}


var blur:BlurFilter = new BlurFilter(5,5,3);
            var shadowFilt:DropShadowFilter = new DropShadowFilter(10,45,0x999999,1.0, 5,5);
            var filters:Array = new Array();
            filters.push(blur);
            filters.push(shadowFilt);
           
            container.filters = filters;
           
            kugel.filters = filters;
           
           
        UIcompnent.addChild(container);
       
        var endTween:Function = function():void{
            container.filters = null
            trace("hi");
            }
       
        Tweener.addTween(container, {height:Math.random()*400, width:400, time:2, transition:"easeInSine", onComplete:endTween});


ist das immer noch falsch?
wie würde ich das richtig bwz performance freundlicher machen?

mfg
Die Lösung ist: das Suchen.
LongCrew = 2 people
 30.12.2009, 20:26Re7
Benutzerbild von badskillFlashhilfe.de Moderator
Beiträge: 5285
Wohnort: Bernau (bei Berlin)
Registriert: Nov 2002

Dann sollte doch eigentlich alles gut laufen.
An welcher Stelle bricht denn die Performance zusammen?
 30.12.2009, 20:48Re8
Benutzerbild von longCrew
Beiträge: 380
Wohnort: München, Berlin
Registriert: Apr 2009

Themenautor/in

na ja es ist so das wenn er es lädt ich auf über 50% CPU auslastung komme

über einen btn rufe ich die schleife incl filter öfter auf und dann zeichnet er alles neu bzw fügt particl hinzu weil ich ja nichts cleane...

und da ist jedesmal so dass für kurze zeit die CPU so hoch wird jedenfalls muss ich noch mehr "malen" zur gleichen zeit und mach mir sorgen was dann passiert....
also würde ich lieber jetzt schon performance-auslastung-verringern...
Die Lösung ist: das Suchen.
LongCrew = 2 people
 30.12.2009, 20:53Re9
Benutzerbild von badskillFlashhilfe.de Moderator
Beiträge: 5285
Wohnort: Bernau (bei Berlin)
Registriert: Nov 2002

Wenn das nur ab und zu passiert (bei einem Buttonklick), spielt es keine größere Rolle würde ich sagen.

über einen btn rufe ich die schleife incl filter öfter auf und dann zeichnet er alles neu bzw fügt particl hinzu weil ich ja nichts cleane...
Da hast du ja schon eine Antwort auf das Problem. Du erstellst alles nochmal obwohl das sicherlich nicht notwendig ist.
 30.12.2009, 21:01Re10
Benutzerbild von longCrew
Beiträge: 380
Wohnort: München, Berlin
Registriert: Apr 2009

Themenautor/in

konnte ich das schon erstelle irgendwie mit CacheAsBitmap zwspeichern???

is halt so wenn die fkt wieder aufgerufen wird durch btn-click dann erscheinen mehr particl wie kann ich die schon gezeichneten speichern um diese nicht nochmal zeichnen zu müssen?

das mit dem btn is nur zwlösung es sollte später automatisch fkt

mfg
Die Lösung ist: das Suchen.
LongCrew = 2 people
 30.12.2009, 21:30Re11
Benutzerbild von badskillFlashhilfe.de Moderator
Beiträge: 5285
Wohnort: Bernau (bei Berlin)
Registriert: Nov 2002

Die gezeichneten hast du doch bereits gespeichert oder für was ist das Array particles da?
cacheAsBitmap würde ich an dieser Stelle erstmal vernachlässigen. Habe das Gefühl, du versteifst dich da zu sehr auf diese Eigenschaft.

Passiert da noch was mit den Partikeln oder bleiben die einfach an der Stelle wo sie erstellt wurden?
 30.12.2009, 23:25Re12
Benutzerbild von longCrew
Beiträge: 380
Wohnort: München, Berlin
Registriert: Apr 2009

Themenautor/in

naja eigtl nicht mehr viel sie bleiben da stehen ;)
Die Lösung ist: das Suchen.
LongCrew = 2 people
 30.12.2009, 23:53Re13
Benutzerbild von badskillFlashhilfe.de Moderator
Beiträge: 5285
Wohnort: Bernau (bei Berlin)
Registriert: Nov 2002

Dann würde es doch reichen, wenn du alles in nur einem Shape (Shape anstelle von Sprite, bringt etwas mehr Leistung) zeichnest.
So in etwa:
ActionScript:
1
2
3
4
5
6
7
8
9
10
var particle:Shape = new Shape();
particle.graphics.lineStyle(0.5, 0x000066);
var g:Graphics = particle.graphics;
g.beginFill(color, 0.75);
for (var j:int = 0; j < 600; j++)
{
   g.drawCircle(Math.random()*width , Math.random()*height, Math.random()*0.5);
}
g.endFill();
container.addChild(particle);

Das geht jedenfalls superschnell.
 31.12.2009, 08:22Re14
Benutzerbild von longCrew
Beiträge: 380
Wohnort: München, Berlin
Registriert: Apr 2009

Themenautor/in

ah danke;)

aber es ist dann schon sinnvoll (für spätere weiterverarbeit. mit tweens usw) die particls in nen mc zu legen? oder gibt noch was besseres?
Die Lösung ist: das Suchen.
LongCrew = 2 people
 31.12.2009, 08:28Re15
Benutzerbild von longCrew
Beiträge: 380
Wohnort: München, Berlin
Registriert: Apr 2009

Themenautor/in

hätte noch ne frage wie kann ich es anstellen das mein blurFilter mit der zeit t von z.B. 3 sek abnimmt also alles wieder langsam scharf wird?
Die Lösung ist: das Suchen.
LongCrew = 2 people
 
Themen
Ähnliche Beiträge zum Thema
Tweener (Caurina) Performance [Flash 10] 25.03.2011 - Kuestenkind75
 

AntwortenRegistrieren Seite1 2 3  

Schnellantwort

Du musst registriert sein, um diese Funktion nutzen zu können.
Partner Webseiten: DesignerInAction.de   Designnation.de   Mediengestalter.info   php-resource.de   phpforum.de   phpwelt.de   Pixelio.de   PSD-Tutorials.de   Tutorials.de

Haftungsausschluss   Datenschutzerklärung   Hier Werben   Impressum
© 1999-2012 Sebastian Wichmann - Flashhilfe.de