Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 22-09-2003, 20:33   #1 (permalink)
Überzeugter Flasher...
 
Benutzerbild von DoppelX
 
Registriert seit: Oct 2001
Ort: Köln
Beiträge: 1.654
setInterval wird immer langsamer...

Hi ich habe wie in der doku beschrieben, mein interval aufgebaut.

Ungefähr so:

PHP-Code:
obj.drawThis = function() {
            
//Funktion
}

onEnterFrame = function() {
    if(
koLoad and startPlay == 0) {
        
//Geschwindigkeit prüfen
        
if(speed==1setInterval(obj,"drawThis",1);
        if(
speed==2setInterval(obj,"drawThis",20);

        
startPlay 1;
        
delete onEnterFrame;
}

Nur leider wird das mit der Zeit immer langsamer. Wenn ich speed 1 habe, macht er am anfang recht schnell, aber mit der Zeit wird es langsamer, langsamer und langsamer

Weiss jemand woran es liegt?

ich habs auch schon mit clearInterval(intervalID); probiert, hat aber leider auch nicht gebracht. Jemand eine idee?

gruss x²
__________________
Tjo...
DoppelX ist offline   Mit Zitat antworten
Alt 22-09-2003, 23:47   #2 (permalink)
Überzeugter Flasher...
 
Benutzerbild von DoppelX
 
Registriert seit: Oct 2001
Ort: Köln
Beiträge: 1.654
hmm.. keiner eine idee?
__________________
Tjo...
DoppelX ist offline   Mit Zitat antworten
Alt 23-09-2003, 00:38   #3 (permalink)
meistens harmlos
 
Benutzerbild von rena
 
Registriert seit: Jun 2001
Ort: Stuttgart
Beiträge: 17.643
Meinst du mit "ungefähr so" genau so?

Dann fehlt die Definition der Zeitleiste bei onEnterFrame=function() sowie beim delete - ggf. auch bei den Variablen, mußt mal schaun.

Ungetestet ...

Gruß
rena
__________________
www.rena-hermann.de

The angels have the phone box
rena ist offline   Mit Zitat antworten
Alt 23-09-2003, 00:53   #4 (permalink)
alien
 
Benutzerbild von Smirgel
 
Registriert seit: May 2002
Ort: Colonia
Beiträge: 7.597
wenn du das schreibst:
ActionScript:
  1. obj.drawThis = function() {
  2.             //Funktion
  3. }
  4.  
  5. onEnterFrame = function() {
  6.     if(koLoad and startPlay == 0) {
  7.         //Geschwindigkeit prüfen
  8. trace(bla++);
  9.         if(speed==1) setInterval(obj,"drawThis",1);
  10.         if(speed==2) setInterval(obj,"drawThis",20);
  11.  
  12.         startPlay = 1;
  13.         delete onEnterFrame;
  14. }
  15. }
was wird dir aus-ge-traced?

versuch mal: delete this.onEnterFrame;
__________________
bei fragen, fragen.
Smirgel ist offline   Mit Zitat antworten
Alt 23-09-2003, 13:31   #5 (permalink)
Überzeugter Flasher...
 
Benutzerbild von DoppelX
 
Registriert seit: Oct 2001
Ort: Köln
Beiträge: 1.654
hmm habs nun in folgenden beiden varianten probiert:

PHP-Code:

this
.onEnterFrame = function() {
    if(
koLoad and startPlay == 0) {
        
//Geschwindigkeit prüfen
        
var intervalID;
        if(
speed==1intervalID setInterval(obj,"drawThis",1);
        if(
speed==2intervalID setInterval(obj,"drawThis",20);
        
startPlay 1;
        
delete this.onEnterFrame;
}

PHP-Code:

onEnterFrame 
= function() {
    if(
koLoad and startPlay == 0) {
        
//Geschwindigkeit prüfen
        
var intervalID;
        if(
speed==1intervalID setInterval(obj,"drawThis",1);
        if(
speed==2intervalID setInterval(obj,"drawThis",20);
        
startPlay 1;
        
delete this.onEnterFrame;
}

und im objekt noch ein clearInterval(intervalID);
Aber es wird immer noch langsamer und langsamer
__________________
Tjo...

Geändert von DoppelX (23-09-2003 um 14:02 Uhr)
DoppelX ist offline   Mit Zitat antworten
Alt 23-09-2003, 15:25   #6 (permalink)
Überzeugter Flasher...
 
Benutzerbild von DoppelX
 
Registriert seit: Oct 2001
Ort: Köln
Beiträge: 1.654
kommt schon
__________________
Tjo...
DoppelX ist offline   Mit Zitat antworten
Alt 23-09-2003, 23:23   #7 (permalink)
Überzeugter Flasher...
 
Benutzerbild von DoppelX
 
Registriert seit: Oct 2001
Ort: Köln
Beiträge: 1.654
*seufz*
__________________
Tjo...
DoppelX ist offline   Mit Zitat antworten
Alt 23-09-2003, 23:25   #8 (permalink)
meistens harmlos
 
Benutzerbild von rena
 
Registriert seit: Jun 2001
Ort: Stuttgart
Beiträge: 17.643
Häng halt mal ein Testfile an, an dem man rumprobieren kann.
Zum selbst aufbauen hat vielleicht keiner Lust.

Gruß
Rena
__________________
www.rena-hermann.de

The angels have the phone box
rena ist offline   Mit Zitat antworten
Alt 24-09-2003, 10:32   #9 (permalink)
Neuer User
 
Registriert seit: Aug 2003
Beiträge: 6
hmmm vermutung:

du hast nirgendwo var intervalid stehen, damit ist intervalid in deiner funktion lokal, und du erzeugst jedesmal ein neues intervalobjekt...

also intervalid global deklarieren...
foobaz ist offline   Mit Zitat antworten
Alt 24-09-2003, 12:51   #10 (permalink)
Überzeugter Flasher...
 
Benutzerbild von DoppelX
 
Registriert seit: Oct 2001
Ort: Köln
Beiträge: 1.654
hab leider kein beispiel da

Hab aber auch var intervalID; dort stehen

hab nochmal in der if abfrage und danach in delete this.onEnterFrame reingemacht.. hab das gane auch this.onEnterFrame = function() { genannt. Bringt alles nicht. Nach 3-4 sec ist die Systemleistung auf 100%

Objekt hab ich nun zur normalen funktion gemacht. Hab dort auch am ende der funktion ein clearInterval(intervalID);

Hilft aber alles nichts...

help me!

gruss x²

EDIT:
eigentlich lösche ich doch alles was speicher frisst? Immer den onEnterFrame und ich leere immer die intervalID.. was frisst wohl noch soviel speicher.. *grübel*
__________________
Tjo...

Geändert von DoppelX (24-09-2003 um 12:53 Uhr)
DoppelX ist offline   Mit Zitat antworten
Alt 24-09-2003, 13:16   #11 (permalink)
Farbe ist Luxus
 
Benutzerbild von ludabruda
 
Registriert seit: May 2003
Ort: Köln
Beiträge: 2.405
hallo,

hab mir deinen letzten Code mal kopiert. Dein onEnterFrame ist es definitiv nicht; wird schließlich gelöscht.

Vielmehr würde mich interessieren, was in der Funktion drawThis() passiert. Ich habe testweise wahllos Linien per Drawing-API auf die Bühne gemalt; das wurde auch immer langsamer.

Zumal Intervalle von 1 bzw. 20 Milisekunden schon recht happig sind.

Lösche ich in jedem Aufruf per this.clear(), bleibt die Belastung konstant niedrig.

Ich kann also nur vermuten, dass bei dir a) irgendwas gezeihnet wird (das legt der Funktionsname irgendwie nahe) und b) diese Zeichnung nicht gelöscht wird.
Das Problem scheint somit an der generellen Flash-Schwäche zu liegen, viele Objekte darzustellen.

Grüße
Sascha

PS: ein Beispiel wäre in der Tat recht hilfreich...
__________________
12:15, press return
ludabruda ist offline   Mit Zitat antworten
Alt 27-09-2003, 01:53   #12 (permalink)
Überzeugter Flasher...
 
Benutzerbild von DoppelX
 
Registriert seit: Oct 2001
Ort: Köln
Beiträge: 1.654
Hi,
sorry das ich mich erst jetzt wieder melde

Also er zeichnet was.. jo..

hier mal die funktion:

PHP-Code:
function drawThis() {
        if(
cC.length) {
            if(
cR[k] == 1) {
                
pencil_mc.lineStyle(cS[k],"0x"+cC[k],100);
                
pencil_mc.moveTo(cX[k],(cY[k]-36));    
            }
            
            if(
cR[k] == 0) {
                
pencil_mc.lineStyle(cS[k],"0x"+cC[k],100);
                
pencil_mc.lineTo(cX[k],(cY[k]-36));
            }
        
k++;
        
clearInterval(intervallID);
        }else{
        
clearInterval(intervallID);
        
this.clear();
        }


also das muss echt geändert werden mit den 100% systemauslastung

hoffe jemand weiss noch was..
__________________
Tjo...

Geändert von DoppelX (27-09-2003 um 01:55 Uhr)
DoppelX ist offline   Mit Zitat antworten
Alt 27-09-2003, 14:12   #13 (permalink)
Überzeugter Flasher...
 
Benutzerbild von DoppelX
 
Registriert seit: Oct 2001
Ort: Köln
Beiträge: 1.654
sagt nicht ihr wisst nicht mehr weiter...
__________________
Tjo...
DoppelX ist offline   Mit Zitat antworten
Alt 27-09-2003, 14:31   #14 (permalink)
nerdig working
 
Benutzerbild von michael
 
Registriert seit: Jul 2001
Ort: Hamburg
Beiträge: 5.832
ich denke du hast bist einfach am limit, wenn du 1000 bzw. 50 mal in der sekunde eine linie zeichnest.

hast du dir mal die framerate ausgegeben?
ich wette die geht bei dieser anzahl an linien auch verdammt in die knie. und setInterval ist ohne updateAfterEvent sehr frameratenabhängig.

Edit: Davon abgesehen schafft setInterval selbst mit updateAfterEvent bestenfalls 10 Intervalle pro Framewechsel, für einen Interval von 1ms bräuchtest du also eine stabile Framerate von 100, diese wird bei deiner funktion bestimmt nicht gehalten.

gruß
michael

Geändert von michael (27-09-2003 um 14:45 Uhr)
michael ist offline   Mit Zitat antworten
Alt 27-09-2003, 14:43   #15 (permalink)
Überzeugter Flasher...
 
Benutzerbild von DoppelX
 
Registriert seit: Oct 2001
Ort: Köln
Beiträge: 1.654
Hmm.... ok.. flash gekillt

Was empfielst du mir denn dann? Langsamer kann ich es net machen, weil es dann zu langsam wird.

edit:
ne die framerate habe ich mir noch nicht ausgeben lassen. Weiss garnet wie des geht
__________________
Tjo...
DoppelX ist offline   Mit Zitat antworten
Antwort

Lesezeichen

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



Alle Zeitangaben in WEZ +1. Es ist jetzt 06:45 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele