Flashhilfe.de - Flash Community

Spieleschleife lastet Rechner aus [Flash 11]

 


AntwortenRegistrieren Seite1  

Rotblitz#1
Benutzerbild von Rotblitz
Beiträge: 46
Wohnort: Hamburg
Registriert: May 2009

19.02.2013, 22:05

Hallo,
ich habe im Zuge eines kleinen Projektes einen Graphen auf der Bühne zeichnen müssen.
Um dies zu realisieren, ließ ich auf einen Shape-Objekt Pixel für Pixel einen neuen Strich zeichnen.
Von Links nach rechts wurden so also - je nach Wert unterschiedlich hohe - Linien gezeichnet.

Um auf jeden Rechner die gleiche Geschwindigkeit zu erreichen, nutzte ich eine Technik aus der Spielentwicklung:
Es soll NICHT jedes mal auf OnEnterFrame die so genante update() bzw. deren oben beschriebener Inhalt aufgerufen werden, sondern zunächst die Zeit zwischen zwei "updates" mit einer Delta-Time abgeglichen werden und je nach dem 0 bis maxUpdates ausgeführt werden.

Alles lief auch, aber nach wenigen Minuten, wurde der Rechner offenbar so sehr ausgelastet, dass die Zeit zwischen den "updates" immer größer wurde und der scheinbar Windows selber auch kaum reagieren konnte.

Kann mir jemand einen Hinweis darauf geben, woran das gelegen haben könnte?

Besten Dank :)

PHP:
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
var accumulator:int = 0;
var herz:Number = 21;
var dt:Number = 1000 / herz;

...

public function startDraw():void
{
    setPoints(getPoints());
    this.addEventListener(Event.ENTER_FRAME, update);
}

...


public function update(e:Event)
{
    timeNow = flash.utils.getTimer();
    millisecondsElapsed = timeNow - lastTime;
    lastTime = timeNow;
    accumulator +=  millisecondsElapsed;
       
    updateCounter = 0;
    trace("DeltaTime (dt) : " + dt);
    while (accumulator >= dt && updateCounter <= maxUpdates)
    {
                updateCounter++;
            accumulator -=  dt;

                //F&uuml;r den Graphen...
            this.needlePosX +=  1;

                ...

                //Einige Operationen wie diese kam dann:
                canvas.graphics.lineStyle(1, 0x000000, 0);
            canvas.graphics.beginFill(0xffffff,1);
        canvas.graphics.moveTo(needlePosX, 161/2);
        canvas.graphics.lineTo(needlePosX,0);
        canvas.graphics.lineTo(needlePosX+3,0);
        ...
        canvas.graphics.endFill();
        canvas.graphics.lineStyle(2,0x000000);

                ...

                //Ein paar wenige weitere Berechnungen wie:
                if(zyklusZaehler<=bestimmterZeitRaum&& andererMC.height<= 140)
        {   
            var schrittI:Number = (pointsArray[7] * 0.17 + 11.6)/(bestimmterZeitRaum);
            andererMC.height += schrittI;
        }

                ...
         }
}
candiru#2
Benutzerbild von candiru
Beiträge: 190
Registriert: May 2007

23.02.2013, 14:32

falls du immer wieder ein bild übermalst hilft vielleicht z.b. ein canvas.graphics.clear() an geeigneter stelle.

AntwortenRegistrieren Seite1  

Schnellantwort

Du musst registriert sein, um diese Funktion nutzen zu können.

 
Ähnliche Beiträge zum Thema
Partner Webseiten: art-and-law.de  Mediengestalter.info   php-resource.de   phpforum.de   phpwelt.de   Pixelio.de   Scubacube.de  
Haftungsausschluss   Datenschutzerklärung   Impressum
© 1999-2020 Sebastian Wichmann - Flashhilfe.de