Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 06-06-2004, 11:56   #1 (permalink)
Neuer User
 
Benutzerbild von dimension
 
Registriert seit: Apr 2004
Ort: Wien
Beiträge: 886
Question erneute probleme mit setInterval

ich weiss nicht aber ich hab mit setInterval nur probleme...
zb wollte ich mal einen counter machen, der zählt von 0-100
und wird immer schneller --> d.h. das interval immer kürzer , ab ~30 sollen die Zahlen dann nur mehr "hinaufrattern"...

am anfang hab ich das so probiert:
PHP-Code:
var i=1000;
maxNum=100;
counter_stand=0;
count_txt.text="00"+counter_stand;
//ticker=new Sound();
//ticker.attachSound("ticker.mp3");
counter = function() {
i-=25;
    if(
count_txt.text==maxNumclearInterval(inter);
    if(
counter_stand<maxNum) {
        
counter_stand+=1;
        if(
counter_stand<10count_txt.text="00"+counter_stand;
        else if(
counter_stand<100count_txt.text="0"+counter_stand;
        else 
count_txt.text=counter_stand;
        
updateAfterEvent();
        
//ticker.start();
    
}
}
inter=setInterval(counter,i); 
aber das interval wird nicht kleiner, es ruft die funct. counter immer in 1000milisekunden abständen (1sek) auf, obwohl die globale var i im counter jedesmal verringert wird
wieso?

jetzt hab ichs anders probiert, aber um einiges umständlicher, je nachdem wie hoch der counter schon ist, clear ich das interval, und setze es neu in kleineren abständen:
PHP-Code:
maxNum=100;
counter_stand=0;
count_txt.text="00"+counter_stand;
//ticker=new Sound();
//ticker.attachSound("ticker.mp3");
counter = function() {
    if(
count_txt.text==maxNumclearInterval(inter);
    if(
counter_stand<maxNum) {
        
counter_stand+=1;
        if(
counter_stand<10count_txt.text="00"+counter_stand;
        else if(
counter_stand<100count_txt.text="0"+counter_stand;
        else 
count_txt.text=counter_stand;
        
updateAfterEvent();
        
//ticker.start();
    
}
        if(
counter_stand>35){
            
clearInterval(inter);
            
inter=setInterval(counter,10);
        }
        else if(
counter_stand>30){
            
clearInterval(inter);
            
inter=setInterval(counter,50);
        }
        else if(
counter_stand>25){
            
clearInterval(inter);
            
inter=setInterval(counter,100);
        }
        else if(
counter_stand>20){
            
clearInterval(inter);
            
inter=setInterval(counter,150);
        }
        else if(
counter_stand>14){
            
clearInterval(inter);
            
inter=setInterval(counter,300);
        }
        else if(
counter_stand>7){
            
clearInterval(inter);
            
inter=setInterval(counter,400);
        }
        else if(
counter_stand>3){
            
clearInterval(inter);
            
inter=setInterval(counter,500);
        }
}
inter=setInterval(counter,1000); 
so umständlich funktioniert der counter zwar einmal,
aber anscheinend hat er probleme das/die Intervalle zu clearen...,
weil sich das tw. immer wieder wiederholt, er wieder von neu beginnt usw.. und ich kann nicht zur nächsten szene springen, kA wieso

ich hoffe jemand kann mir helfen, mit intervallen hab ich irgendwie nur probleme
__________________
"Ein Computer ist eine Maschine, mit der man fast so schnell schreiben wie denken kann." (Umberto Eco)
dimension ist offline   Mit Zitat antworten
Alt 06-06-2004, 12:36   #2 (permalink)
Neuer User
 
Registriert seit: Jun 2001
Ort: Stuttgart
Beiträge: 6.415
der erste weg war doch schonmal nicht schlecht gedacht nur hast eins vergessen
das intervall wird nur einmal gesetzt und dann in einem bestimmten intervall ausgeführt-ist ja der sinn davon, daher bringt dir dass verringern von i nichts.

wenn dus aber ungefähr wie folgt machst sollte das ding schon klappen
Code:
var i=1000; 
maxNum=100; 
counter_stand=0; 
count_txt.text="00"+counter_stand; 
//ticker=new Sound(); 
//ticker.attachSound("ticker.mp3"); 
counter = function(p) { 
if (i>25) i-=25; 
    if(count_txt.text==maxNum) clearInterval(inter); 
    if(counter_stand<maxNum) { 
        counter_stand+=1; 
        if(counter_stand<10) count_txt.text="00"+counter_stand; 
        else if(counter_stand<100) count_txt.text="0"+counter_stand; 
        else count_txt.text=counter_stand; 
        updateAfterEvent(); 
        //ticker.start(); 
    } 
	trace(i)
	clearInterval(_root.inter)
	_root.inter=setInterval(p,i,p)
} 
inter=setInterval(counter,i,this.counter);
viel erfolg mit dem ansatz
deluxe
Deluxe ist offline   Mit Zitat antworten
Alt 06-06-2004, 12:39   #3 (permalink)
Flashaholic
 
Benutzerbild von atothek
 
Registriert seit: Feb 2003
Ort: Berlin
Beiträge: 1.459
mach es doch funktionaler indem du das interval in einer eigen function erzeugst
und die wert über arrays verwaltest guckst du schnelle erste idee

PHP-Code:
maxNum 100;
counter_stand 0;
c1 0;
counter = function () {
    if (
counter_stand<maxNum) {
        
// ticker.start();
    
}
    if (
counter_stand==counterArr[c1]) {
        
trace("aaa");
        
setNewInterval(intervalArr[c1]);
        
c1++;
    }
    
counter_stand++;
    
updateAfterEvent();
};
counterArr = [371420253035];
intervalArr = [5004003001501005010];
setNewInterval = function (pInterval) {
    
clearInterval(inter);
    
inter setInterval(this"counter"pInterval);
};
setNewInterval(1000); 
__________________
TVNEXT Solutions
atothek ist offline   Mit Zitat antworten
Alt 06-06-2004, 12:46   #4 (permalink)
Neuer User
 
Registriert seit: Jun 2001
Ort: Stuttgart
Beiträge: 6.415
atothek
nen this in ner funktion referenziert nur auf die zeitleiste wo die funktion definiert wurde-schon ausprobiert.
und schon recht kompliziert, warum alles im voraus niederschreiben wenn mans auch berechnen kann?

deluxe
Deluxe ist offline   Mit Zitat antworten
Alt 06-06-2004, 12:50   #5 (permalink)
Neuer User
 
Benutzerbild von dimension
 
Registriert seit: Apr 2004
Ort: Wien
Beiträge: 886
danke für die schnellen antworten!
ich schau mirs mal, hoffentlich funktionierts jetzt...

aber was ich trotzdem nicht verstehe...
wieso er manchmal die intervalle nicht richtig cleart ....

danke!
__________________
"Ein Computer ist eine Maschine, mit der man fast so schnell schreiben wie denken kann." (Umberto Eco)
dimension ist offline   Mit Zitat antworten
Alt 06-06-2004, 13:00   #6 (permalink)
Flashaholic
 
Benutzerbild von atothek
 
Registriert seit: Feb 2003
Ort: Berlin
Beiträge: 1.459
@deluxe ich weiß nicht wovon du redest mit this in functionen erleuter das mal etwas genauer und was meinste mit berechnen ???
__________________
TVNEXT Solutions
atothek ist offline   Mit Zitat antworten
Alt 06-06-2004, 13:04   #7 (permalink)
Neuer User
 
Benutzerbild von dimension
 
Registriert seit: Apr 2004
Ort: Wien
Beiträge: 886
@Deluxe:

ich hab das mit deinem code probiert,
aber komischer weisse ändert sich gar nix, also zählt überhaupt nicht...?

was ich auch nicht ganz kapier wieso du manchmal _root.inter statt nur inter verwendest/ macht das einen unterschied?
Zitat:
clearInterval(_root.inter)
_root.inter=setInterval(p,i,p)
??
__________________
"Ein Computer ist eine Maschine, mit der man fast so schnell schreiben wie denken kann." (Umberto Eco)
dimension ist offline   Mit Zitat antworten
Alt 06-06-2004, 14:01   #8 (permalink)
Neuer User
 
Registriert seit: Jun 2001
Ort: Stuttgart
Beiträge: 6.415
@athotek:
PHP-Code:
//im root
a=function(){
trace(this)
}
a() //gibt dir _level0 aus
kein verweis auf ne funktion sondern auf ne zeitleiste 
von wegen berechnen
du schreibst die intervall werte im vorraus nieder:
PHP-Code:
intervalArr = [5004003001501005010]; 
warum nicht "on-the-fly" berechnen?
bei dir ne zahlen reihe zu finden wird wohl etwas komplizierter
i-i/5 würde doch auch reichen?
dann kannste dir das ganze "arrayzeugs" sparen

@dimension
hast du meinen code mal komplett kopiert?
da ist doch ein trace(i) drinne. i wird richtig verringert und du hast auch zugriff drauf.
also sollte doch der rest kein problem sein?

das mit dem root: ich war nur nachlässig(faul), solltest aus der funktion immer ne absolute pfadangabe bzw. referenz benutzen!
warum ein bloßes "inter" in der funktion funktioniert?
ganz einfach, in der funktion wurde keine variable mit dem namen "inter" lokal (also per var) deklariert.
findet flash dort(in der funktion) nicht das inter wird automatisch auf den root verwiesen.
ist kein bug-läuft eben so ab-kann aber für verwirrung sorgen.


deluxe
Deluxe ist offline   Mit Zitat antworten
Alt 06-06-2004, 14:09   #9 (permalink)
Neuer User
 
Registriert seit: Jun 2001
Ort: Stuttgart
Beiträge: 6.415
PHP-Code:
clearInterval(_root.inter)
_root.inter=setInterval(p,i,p
allgemein:setInterval(funktion,intervall,parameter )

schau dir den kopf der counter funktion an
PHP-Code:
counter = function(p) { 
was mache ich also?
ich übergebe jedes mal die referenz(in p gespeichert) auf die funktion der funktion selbst.
hätte auch einfach das this der funktion überschreiben können, nur hab ich ja vorhin davon geredet dass das nicht geht, und hätte ich auf einmal doch ein this verwendet...käme komisch
ausgeschrieben sieht die sache oben also so aus:
PHP-Code:
_root.inter=setInterval(p,i,p)
//wird intern zu
_root.inter=setInterval(_root.counter,i,_root.counter
IN _root.counter steht nun p für _root.counter 
deluxe
Deluxe ist offline   Mit Zitat antworten
Alt 06-06-2004, 14:11   #10 (permalink)
Flashaholic
 
Benutzerbild von atothek
 
Registriert seit: Feb 2003
Ort: Berlin
Beiträge: 1.459
na deluxe du meinßt das bei dem setzen vom interval

PHP-Code:
 inter setInterval(this"counter"pInterval); 
nehme ich mal an das ist die schreibweiße in der man den handler als referenz mit übergibt und der ist vom type Object und nicht MovieClip !!!! MovieClip ist allerdings auch vom type Object und kann deshalb durchaus auch die referenz sein und ein this verweißt nicht ausschließlich auf eine Zeitleiste das ist blödsinn
__________________
TVNEXT Solutions
atothek ist offline   Mit Zitat antworten
Alt 06-06-2004, 14:40   #11 (permalink)
Neuer User
 
Registriert seit: Jun 2001
Ort: Stuttgart
Beiträge: 6.415
unterschätz mich nicht
klar dass this auf alles mögliche zeigen kann.
was ich die ganze zeit sagen will:
eine funktion weiß von haus aus zwar wo sie liegt nicht aber ihren namen, also auch nicht die referenz auf sich.

du übergibst lediglich ne referenz auf den ort der deklarierung der funktion,
level0 oder wo auch immer
wärs in nem objekt auf das objekt
aber du übergibst NICHT die referenz auf die funktion selbst!

deluxe
Deluxe ist offline   Mit Zitat antworten
Alt 06-06-2004, 14:48   #12 (permalink)
Neuer User
 
Benutzerbild von dimension
 
Registriert seit: Apr 2004
Ort: Wien
Beiträge: 886
@deluxe

... aha jetz zeigt er mal was an, danke, kA wieso vorher nicht

wegen dem _root.inter: kann ich mir die ganzen pfadangaben nicht eh einfach ersparen wenn ich außerhalb der funct. am anfang einfach var inter global definiere?

danke nochmals,
wegen dem bsp:
dann gehört aber die zeile raus oder:
if(count_txt.text==maxNum) clearInterval(inter);
weil unten steht dann das clearInterval(_root.inter);
und dort unten gehört halt dann noch die if-abfrage if(count_txt.text==maxNum) damits nicht mehr gesetzt wird, wenns maxNum
erreicht hat...oder?

nur das problem ist, er cleart das interval anscheinend noch immer nicht ordentlich, weil er gibt weiterhin i aus...??
__________________
"Ein Computer ist eine Maschine, mit der man fast so schnell schreiben wie denken kann." (Umberto Eco)
dimension ist offline   Mit Zitat antworten
Alt 06-06-2004, 14:51   #13 (permalink)
Flashaholic
 
Benutzerbild von atothek
 
Registriert seit: Feb 2003
Ort: Berlin
Beiträge: 1.459
hah ok da haste natürlich recht. hab ich mich wohl etwas unpräzise ausgedrückt. was ich meine ist das man bei der schreibweiße den referenzierten Pfad übergibt und den Funktionsnamen als String gefolgt vom interval und den parametern
PHP-Code:
setInterval(ReferenzPfad"functionName"intervalParameter1parameterN); 
da haben wir die ganze zeit das gleiche gemeint!

was du mit dem Berechnen meinßt hätte ich ja auch so gemacht allerdings hat er sehr eigene wert verwendet, eben diese im array deshalb hab ich das so gelöst wenn er ne einfache 5 oder 6 oder wie auch immer reihe genommen hätte ist das selbstverständlich das zu berechnen
__________________
TVNEXT Solutions
atothek ist offline   Mit Zitat antworten
Alt 06-06-2004, 16:00   #14 (permalink)
Neuer User
 
Registriert seit: Jun 2001
Ort: Stuttgart
Beiträge: 6.415
hmm ist mir nicht aufgefallen dass du das anders formuliert hast, weil ich das noch nie so geschrieben habe- oder is das etwa neu in dem aktuellen flash?

wenigstens sind wir uns einig geworden.

@dimension
bei dir fehlt noch die abbruchbedingung
würde das ingesamt so machen
PHP-Code:
counter=function(ref,pintV){
    
sIntV=1000
    maxN
=100
        
//100 zahlen+gleichmäßig intervall verringern?
        //macht 10ms die jedes intervall kürzer läuft
    
diff=sIntV/maxN  //10ms
    
n++
    
clearInterval(ref.intV)
        
//kein negatives intervall zulassen
    
if(pIntV>diffpintV-=diff
    
if(n-1<maxN){
                 
//führende nullen
        
var m="000"+n.toString()
        var 
l=m.length
                 
//überflüssige nullen kürzen
        
var m=m.substring(l-3,l)
                 
count_txt.text=m
                 ref
.intV=setInterval(ref.counter,pIntV,ref,pIntV)
    }
}

//setup
count_txt.text="000"
pIntV=1000
intV
=setInterval(this.counter,pIntV,this,pIntV
müsste genau dein ding sein?!
deluxe
Deluxe ist offline   Mit Zitat antworten
Alt 06-06-2004, 17:17   #15 (permalink)
Neuer User
 
Benutzerbild von dimension
 
Registriert seit: Apr 2004
Ort: Wien
Beiträge: 886
wow!
super!

das interval hört dann wirklich auf und wird gecleart!

danke vielmals!
__________________
"Ein Computer ist eine Maschine, mit der man fast so schnell schreiben wie denken kann." (Umberto Eco)
dimension 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 11:07 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele