• beyond tellerrand – play. Register Now!
Zurück   Flashforum > Flash > Flash Fortgeschritten > Flash 8

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 10-05-2007, 17:35   #1 (permalink)
undefined
 
Benutzerbild von mildesign
 
Registriert seit: Jul 2001
Ort: Stuttgart
Beiträge: 1.810
delayme Funktion --> Problem mit setInterval()

So nachdem hier schon öfters nach
"Funktion nach einer bestimmten Zeit starten gefragt wurde hab ich mich mal rangesetzt.
Ich hänge aber gerade.
PHP-Code:
function inf(ifc,ifname,ipara){
    
trace("functioncall:"+ifc);
    
trace("para:"+ipara);
// murks aber selbst das geht nicht
    
_root[ifname](ipara[0],ipara[1],ipara[2]);
    
clearInterval (_root["inID"+ifc]);
}
    
function 
delayMe(fc:String,time:Number){
    var 
para_Arr:Array=[];
    
fname=fc.substring(0,fc.indexOf("("));
    
para=fc.substring(fc.indexOf("(")+1,fc.indexOf(")"));
    while(
para.indexOf(",")>-1){
        
lasthit=para.indexOf(",");
        
temp=para.substring(0,lasthit);
        
para_Arr.push(temp);
        
para=para.substring(lasthit+1,para.length);
    }
    
para_Arr.push(para);
    
trace("fc:"+fc+"\n"+"time:"+time+"\n"+"fname:"+fname+"\n"+"para:"+para);
    
trace("-----------------------------------------------\n"+para_Arr);
    
_root["inID"+fc]=setInterval("inf",time,fc,fname,para_Arr);
}
//flipIn ist definiert und funktioniert.
flipIn(server_mc,3,true);
//aufruf
delayMe("flipIn(server2_mc,3,true)",20); 
Trace:

Code:
fc:flipIn(server2_mc,3,true)
time:20
fname:flipIn
para:true
-----------------------------------------------
server2_mc,3,true
functioncall:flipIn(server2_mc,3,true)
para:server2_mc,3,true
Den ersten trace führt er aus.
Die Funktion innerhalb von inf() wird aber nie gerufen.
__________________
mfg Frank

Geändert von mildesign (10-05-2007 um 17:38 Uhr)
mildesign ist offline   Mit Zitat antworten
Alt 10-05-2007, 18:48   #2 (permalink)
Der Wunderhund
 
Benutzerbild von gaspode
 
Registriert seit: Jun 2002
Ort: Hattingen
Beiträge: 10.515
Code:
_root["inID"+fc]=setInterval(inf,time,fc,fname,para_Arr);
Der Funktions-Parameter wird nicht als String übergeben,
also ohne Anführungsstriche.

gruß, gaspode
gaspode ist offline   Mit Zitat antworten
Alt 11-05-2007, 10:30   #3 (permalink)
undefined
 
Benutzerbild von mildesign
 
Registriert seit: Jul 2001
Ort: Stuttgart
Beiträge: 1.810
hab ich davor auch getestet gehabt ging auch nciht aber ich hab langsam die fehlerquelle lokalisiert.
hier nochmal der Code:
PHP-Code:
function flipIn(t:MovieClip,time:Number,frame:Boolean){
    
trace("flip:"+t._name);
    var 
tempTw:Object=new Tween(t"_xscale"Elastic.easeOut0100timeframe);
    var 
tempTw2:Object=new Tween(t"_yscale"Elastic.easeOut0100timeframe);
    var 
tempTw3:Object=new Tween(t"_alpha"Strong.easeOut0100timeframe);
}
function 
inf(ifc,ifname,ipara){
    
trace("functioncall:"+ifc);
    
trace("para:"+ipara);
    
_root[ifname](ipara[0],ipara[1],ipara[2]);
    
clearInterval (_root["inID"+ifc]);
}
    
function 
delayMe(fc:String,time:Number){
    var 
para_Arr:Array=[];
    
fname=fc.substring(0,fc.indexOf("("));
    
para=fc.substring(fc.indexOf("(")+1,fc.indexOf(")"));
    while(
para.indexOf(",")>-1){
        
lasthit=para.indexOf(",");
        
temp=para.substring(0,lasthit);
        
para_Arr.push(temp);
        
para=para.substring(lasthit+1,para.length);
    }
    
para_Arr.push(para);
    
trace("fc:"+fc+"\n"+"time:"+time+"\n"+"fname:"+fname+"\n"+"para:"+para);
    
trace("-----------------------------------------------\n"+para_Arr);
    
_root["inID"+fc]=setInterval(inf,time,fc,fname,para_Arr);
}

flipIn(server_mc,3,true);
delayMe("flipIn(server2_mc,3,true)",20); 
Trace:
Code:
flip:server_mc
fc:flipIn(server2_mc,3,true)
time:20
fname:flipIn
para:true
-----------------------------------------------
server2_mc,3,true
functioncall:flipIn(server2_mc,3,true)
para:server2_mc,3,true
flip:undefined
Der zweite flip gibt undefined somit wird die funktion aufgerufen allerdings werden die Parameter nicht richtig übergeben.

Noch eine Zusatzfrage.
Die Aufzählung der einzelnen Array Positionen ist ja ziemlich undynamisch.
wie kann ich das bauen das die Anzahl der Parameter egal ist.
Wenn ich in inf wieder per Schleife einen String zusammenbau mit allen Parametern durch ein Komma getrennt ist mein Array ja ziemlich überflüssig.
oder?
__________________
mfg Frank
mildesign ist offline   Mit Zitat antworten
Alt 14-05-2007, 10:27   #4 (permalink)
undefined
 
Benutzerbild von mildesign
 
Registriert seit: Jul 2001
Ort: Stuttgart
Beiträge: 1.810
hm ich werde irgendwie daraus nicht schlau.
Per Trace bekomme ich die Parameter aber wenn ich diese der eigentlichen Funktion übergebe bekomm ich ein undefined zurück
__________________
mfg Frank
mildesign ist offline   Mit Zitat antworten
Alt 14-05-2007, 11:42   #5 (permalink)
mod_rewrite
 
Benutzerbild von sonar
 
Registriert seit: Feb 2003
Ort: München
Beiträge: 15.594
Wie wär's mit setTimeout()..?
sonar ist offline   Mit Zitat antworten
Alt 14-05-2007, 11:51   #6 (permalink)
class public{}
 
Benutzerbild von public
 
Registriert seit: Feb 2004
Ort: dessau
Beiträge: 1.406
oder im eigenbau

PHP-Code:
/**
*    _setTimeout(func:Function, interval:Number, args:Array):Number
*    _setTimeout(obj:Object, func:String, interval:Number, args:Array):Number
*/
_global._setTimeout = function ():Number {
    var 
a:Array = arguments;
    var 
id:Number;
    var 
args:Array;
    if (
typeof a[0] == "function") {
        
args a.splice (2);
        
id setInterval (function ():Void {
            
a[0].apply (nullargs);
            
clearInterval (id);
        }, 
a[1]);
    } else {
        
id setInterval (function ():Void {
            
args a.splice (3);
            
a[0][a[1]].apply (a[0], args);
            
clearInterval (id);
        }, 
a[2]);
    }
    return 
id;
};
/**
*    _clearTimeout(id:Number):Void
*/
_global._clearTimeout = function (id:Number):Void  {
    
clearInterval (id);
};
/*******************************************************************************************************************
*/
function foo (msg:String):Void {
    
trace (msg);
}
var 
id1:Number _setTimeout (_root"foo"1000"hallo");
var 
id2:Number _setTimeout (foo1500"huhu");
//
onMouseDown = function ():Void {
    
_clearTimeout (id1);
    
_clearTimeout (id2);
}; 

Geändert von public (14-05-2007 um 11:52 Uhr)
public ist offline   Mit Zitat antworten
Alt 14-05-2007, 12:02   #7 (permalink)
undefined
 
Benutzerbild von mildesign
 
Registriert seit: Jul 2001
Ort: Stuttgart
Beiträge: 1.810
_global.Flashwissen.push("setTimeout()");
Trotzdem würde ich gerne wissen wo mein Denkfehler in meinem Lösungsansatz ist.
__________________
mfg Frank
mildesign 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 01:02 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele