Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 09-12-2004, 15:33   #1 (permalink)
=)
 
Benutzerbild von dante
 
Registriert seit: Jun 2003
Beiträge: 499
funktion(en) verzögert aufrufen. Logikfehler?

hallo

seit mehreren stunden versuche ich vergebens eine funktion zeitgesteuert aufzurufen:

durch die hauptfunktion zeigeText wird in einem, durch den rast-array festgelegtem zeitraum, die funktion verzoegern() aufgerufen, die wiederrum die funktion zeigeText() nach ablauf des intervalls erneut starten soll. das soll solange gehen bis alle daten in den arrays einmal angezeigt worden sind. dann beendet sich die funktion zeigeText selbst.


ActionScript:
  1. view.debug("interne Hilfe aufgerufen");
  2.        
  3.         // help content
  4.         zaehler = 0;
  5.         _text0,_text1,_text2 = new Array;
  6.         _text0 = ["engaaa","engbbb","engccc","engddd"];
  7.         _text1 = ["geraaa","gerbbb","gerccc","gerddd"];
  8.         _text2 = ["freaaa","frebbb","freccc","freddd"];
  9.         rast = [1000,1500,1000,1000];
  10.         position = ["50x50","100x100","50x50","100x100"];   
  11.        
  12.         /*FischZeit = getTimer() + rast[zaehler];
  13.         view.debug("INIT_______ fischzeit " + FischZeit);
  14.         */
  15.        
  16.         verzoegern = function(zeit, funktion, para) {
  17.             view.debug("z "+zeit+" f "+funktion+" p "+para);
  18.             losgehts=getTimer() + zeit;
  19.            
  20.             test = function() {
  21.                
  22.                 if(getTimer()>losgehts) {
  23.                 funktion();    
  24.                 } else {
  25.                         test();
  26.                     }
  27.                    
  28.                 }
  29.            
  30.            
  31.            
  32.             } //verzoegern
  33.        
  34.         /*istZeit = function(wert) {
  35.             view.debug("istzeit aufgerufen");
  36.             if (getTimer()>FischZeit) {
  37.                         // zb 15000 = 15 Sek
  38.                         FischZeit = getTimer()+ rast[wert];
  39.                         view.debug("innerhalb. sollte weitermachen");
  40.                         view.debug(FischZeit+"wert "+wert);
  41.                         // opens next bubble
  42.                         wert++;
  43.                         view.debug(FischZeit+"wert "+wert);
  44.                         zeigeText(wert);
  45.                     } else {
  46.                         // checks time again
  47.                         view.debug("ausserhalb. ruft sich nochmal auf");
  48.                         view.debug(wert+"fischzeit "+FischZeit+"gettimer "+getTimer());
  49.                         istZeit(wert);           
  50.                         }         
  51.             }
  52.         */
  53.         zeigeText = function(zahl) {
  54.            
  55.             if(zahl == rast.length) {
  56.                 view.debug("aufhören: "+zahl+" == "+rast.length);
  57.                 return false;
  58.                 }
  59.            
  60.            
  61.             view.debug("anfangszähler: "+zahl);
  62.                
  63.                 // x and y position
  64.                 s = position[zahl];
  65.                 a = s.split("x");
  66.                 x = a[0];
  67.                 y = a[1];
  68.                 // width and height
  69.                 breite = 200;
  70.                 hoehe = 100;
  71.                
  72.                 //view.debug("x: "+x+" y: "+y);
  73.                
  74.                 if(!_root.meinText) {
  75.                         _root.createTextField("meinText",150,x,y,breite,hoehe);
  76.                         //_root.meinText.text = "testtext";
  77.                         _root.meinText.text = _text1[zahl];
  78.                         //updateAfterEvent();
  79.                         //zahl++
  80.                     } else {
  81.                             _root.meinText._x = x;
  82.                             _root.meinText._y = y;
  83.                             //_root.meinText.text = "geänderet";
  84.                             _root.meinText.text = _text1[zahl];
  85.                             //updateAfterEvent();
  86.                             //zahl++
  87.                         }         
  88.                     //_root.meinText.text = _text1[zahl];
  89.                     //updateAfterEvent;
  90.                     //zahl++
  91.                     view.debug("zahl "+zahl);
  92.                    
  93.                     //referenz = zeigeText(zahl);
  94.                     zeit = rast[zahl];
  95.                    
  96.                     view.debug("zeit "+zeit);
  97.                    
  98.                     zahl++;
  99.                    
  100.                     verzoegern(zeit,zeigeText(zahl));
  101.                    
  102.                    
  103.                 //_root.meinText.text = _text1[zahl];
  104.                
  105.                 //view.debug(_text1[zaehler]);
  106.                                
  107.                
  108.                
  109.                 //
  110.                
  111.             //view.debug("ausgangszähler: "+zaehler);
  112.                 /*FischZeit = getTimer() + rast[zahl];
  113.                 view.debug("INIT_______ fischzeit " + FischZeit);
  114.             */
  115.                 //istZeit(zahl);
  116.                
  117.             }
  118.            
  119.         zeigeText(zaehler);

(hinweis: view.debug entpsricht einem trace)

leider klappt das irgendwie nicht so recht.
getraced wird mir nur

Code:
key d: debug window
interne Hilfe aufgerufen
anfangszähler: 0
zahl 1
zeit 1500
anfangszähler: 1
zahl 2
zeit 1000
anfangszähler: 2
zahl 3
zeit 1000
anfangszähler: 3
zahl 4
zeit undefined
aufhören: 4 == 4
z undefined f false p undefined
z undefined f undefined p undefined
z undefined f undefined p undefined
z undefined f undefined p undefined
angezeigt wird nur der letzte puinkt nach einer entsprechenden wartezeit. die anzeige der andern punkte wird irgendwie übersprungen. weiss nich so recht woran es leigen könnte updateAfterEvent() bringt es auch ncihtnso recht...


jemand ne idee?
__________________
x 600.6
y 123.3
dante ist offline   Mit Zitat antworten
Alt 09-12-2004, 17:30   #2 (permalink)
muh
 
Benutzerbild von Janoscharlipp
 
Registriert seit: Apr 2002
Ort: Freiburg / Stuttgart
Beiträge: 4.338
ich habe den Code nicht studiert, aber ich glaube, du solltest Abstand von der Vorgehensweise mit getTimer nehmen.

Verzögern macht man am besten mit setInterval. (s. Flash-Hilfe)

Hier ein Beispiel dazu aus dem Forum:
PHP-Code:
// AS
function hui(st) {
        return function () {
                
trace(s+" ist fast so lustig wie "+t);
        };
}
Function.
prototype.after = function(t) {
        var 
this;
        var 
interval setInterval(function () {
                
clearInterval(interval);
                
f();
        }, 
t);
};

//testen:
this.onMouseDown = function() {
        
hui("lesen""schwimmen").after(1000);
        
hui("sufen""proggen").after(3000);
}; 
Janoscharlipp ist offline   Mit Zitat antworten
Alt 09-12-2004, 17:41   #3 (permalink)
_//\\#//\\_
 
Benutzerbild von warrantmaster
 
Registriert seit: Jan 2003
Beiträge: 7.060
PHP-Code:
count=0
tarr
=["hallo","hier","holla","naklar"]
zarr=[3000,200,2000,500]

function 
labern(t,z)
{
    if(
count<tarr.length)
    {
    
count++
    var 
inter=_root["inter"+count
      
intersetInterval(function () {
            
clearInterval(inter);
            
delete inter;
            
trace(t)
            
labern(tarr[count],zarr[count])
        }, 
z);
    }
}

labern(tarr[count],zarr[count]) 
oder so.
warrantmaster ist offline   Mit Zitat antworten
Alt 10-12-2004, 09:26   #4 (permalink)
=)
 
Benutzerbild von dante
 
Registriert seit: Jun 2003
Beiträge: 499
dankeschön. die lösung so ist super!

ActionScript:
  1. view.debug("interne Hilfe aufgerufen");
  2.        
  3.         // help content
  4.         zaehler = 0;
  5.         _text0,_text1,_text2 = new Array;
  6.         _text0 = ["engaaa","engbbb","engccc","engddd"];
  7.         _text1 = ["geraaa","gerbbb","gerccc","gerddd"];
  8.         _text2 = ["freaaa","frebbb","freccc","freddd"];
  9.         rast = [1000,1500,1000,1000];
  10.         position = ["50x50","100x100","50x50","100x100"];   
  11.        
  12.         zeigeText = function(zahl) {
  13.            
  14.             view.debug("anfangszähler: "+zahl);
  15.            
  16.             // stops
  17.             if(zahl == rast.length) {
  18.                 view.debug("Hilfe stoppt: "+zahl+" == "+rast.length);
  19.                 return;
  20.                 }
  21.                
  22.             p=position[zahl];
  23.             z=rast[zahl];
  24.            
  25.             // had to make switch: _text[_global.lang][zahl] is not working ???
  26.             switch (_global.lang) {
  27.                 case "1":
  28.                 // german
  29.                 t = _text1[zahl];
  30.                 break;
  31.                 case "0":
  32.                 // english
  33.                 t = _text0[zahl];
  34.                 break;
  35.                 case "2":
  36.                 // french
  37.                 t = _text2[zahl]
  38.                 break;
  39.                 }
  40.            
  41.             // time setting methode
  42.             Function.prototype.after = function(t) {
  43.                     var f = this;
  44.                     var interval = setInterval(function () {
  45.                             clearInterval(interval);
  46.                             f();
  47.                             }, t);
  48.                 };
  49.  
  50.            
  51.             // function for creating textfield
  52.             function zeig(txt,s) {
  53.                
  54.                 return function () {
  55.                 // x and y position
  56.                 a = s.split("x");
  57.                 x = a[0];
  58.                 y = a[1];
  59.                 // width and height
  60.                 breite = 200;
  61.                 hoehe = 100;
  62.                
  63.                 if(!_root.meinText) {
  64.                             _root.createTextField("meinText",150,x,y,breite,hoehe);
  65.                             meinText.text = _text1[zahl];
  66.                             view.debug("der text "+_text1[zahl]);
  67.                             view.debug("textfeld-text "+_root.meinText.text);
  68.                             //updateAfterEvent();
  69.                             zahl++
  70.                             zeigeText(zahl);
  71.                     } else {
  72.                             _root.meinText._x = x;
  73.                             _root.meinText._y = y;
  74.                             _root.meinText.text = _text1[zahl];
  75.                             view.debug("der text "+_text1[zahl]);
  76.                             view.debug("textfeld-text "+_root.meinText.text);
  77.                             //updateAfterEvent();
  78.                             zahl++
  79.                             zeigeText(zahl);
  80.                         }   
  81.                        
  82.                 }// return function
  83.                
  84.                 }//zeig()
  85.                
  86.                
  87.                 zeig(t,p).after(z);
  88.            
  89.            
  90.                
  91.                 //view.debug("x: "+x+" y: "+y);
  92.  
  93.                
  94.             } //zeigeText()
  95.            
  96.         zeigeText(0);

was ich nicht ganz verstehe ist:

var f = this; // müsste der verweis sein auf die hauptfunktion (die die auchg etartet werden wird) dessen methode .after ist oder?
__________________
x 600.6
y 123.3
dante ist offline   Mit Zitat antworten
Alt 15-02-2006, 18:54   #5 (permalink)
Neuer User
 
Registriert seit: Dec 2002
Beiträge: 334
wie bei flash 8

wie funzt das in flash 8? bekomme da nen fehler beim prototyp!

**Fehler** Szene=Szene 1, Ebene=prototype, Bild=1:Zeile 1: Die Eigenschaft, auf die verwiesen wird, verfügt nicht über das Attribut 'Static'.
Function.prototype.after = function(t)

Anzahl der ActionScript-Fehler: 1 Gemeldete Fehler: 1


PHP-Code:
// AS
function hui(st) {
        return function () {
                
trace(s+" ist fast so lustig wie "+t);
        };
}
Function.
prototype.after = function(t) {
        var 
this;
        var 
interval setInterval(function () {
                
clearInterval(interval);
                
f();
        }, 
t);
};

//testen:
this.onMouseDown = function() {
        
hui("lesen""schwimmen").after(1000);
        
hui("sufen""proggen").after(3000);
}; 
mukraker ist offline   Mit Zitat antworten
Alt 24-11-2006, 15:03   #6 (permalink)
ExPraktikant
 
Benutzerbild von hacky
 
Registriert seit: Nov 2003
Ort: Leipzig
Beiträge: 117
*push* ^^ Würde mich auch mal interessieren!
__________________
Auge um Auge - Zahn um Zahn
hacky ist offline   Mit Zitat antworten
Alt 27-11-2006, 09:55   #7 (permalink)
Flash and chips.
 
Benutzerbild von Zett
 
Registriert seit: Jun 2001
Ort: Graz
Beiträge: 531
hab's mir auch mal angesehen... unter as 1.0 funzt es, nicht aber unter 2.0.
__________________
The map is NOT the territory.
Zett ist offline   Mit Zitat antworten
Alt 27-11-2006, 13:07   #8 (permalink)
new user
 
Benutzerbild von PinkDragon
 
Registriert seit: Oct 2005
Beiträge: 140
vllt würde es klappen, wenn man noch ein
PHP-Code:
ASSetPropFlags(Function.prototype, ["after"], 1); 
hinzufügt.
Quelle: http://www.seibsprogrammladen.de/für selber Macher/Algorithmen/Array/Array duplizieren
PinkDragon 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 13:43 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele