2010-07-23 13 views
1

Je suis un développeur java/php aidant quelqu'un avec actionscript. Je ne comprends pas pourquoi "ceci" n'est pas défini dans le code ci-dessous. ce n'est qu'un extrait du code, mais j'espère que cela donne une idée de l'endroit où j'essaie de faire référence à "ceci". J'essaie de savoir quel film l'interpolation se déplace afin que je puisse charger le film suivant. Les préadolescents sont utilisés pour déplacer les films dans et hors de l'écran."this" is undefined

var tween_move_1:Tween = new Tween(movie_0, "_x", Strong.easeOut, 1600, 150, 0.5, true); 

tween_move_1.onMotionFinished = function() { 
    stop(); 
    setTimeout(function() { 
     trace(this);//when trace runs it shows undefined 
     var tween_move_2:Tween = new Tween(movie_0, "_x", Strong.easeOut, 150, 1600, 0.5, true); 
     tween_move_2.onMotionFinished = function() { 
     var tween_move_1:Tween = new Tween(movie_1, "_x", Strong.easeOut, 1600, 150, 0.5, true); 
     }; 
    } 
    ,2000);//end of setTimeout 
};//end of tween.onMotionFinished 

MISE À JOUR! Voici le code de travail après l'application des conseils des réponses /:

var tween_move_in:Tween = new Tween(movie_0, "_x", Strong.easeOut, 1600, 150, 0.5, true); 
tween_move_in.onMotionFinished = function() { 
    stop(); 
    var tweeny = this;//create reference to this so it can be used in setTimeout() 
    setTimeout(function() { 
     var movie = tweeny.obj;//use ref to get the movie affected by the tween 
     var movieName:String = movie._name; 
     var splitArray = movieName.split("_"); 
     var index = parseInt(splitArray[1]); 
     var tween_move_out:Tween = new Tween(_root["movie_"+index], "_x", Strong.easeOut, 150, 1600, 0.5, true); 
     tween_move_out.onMotionFinished = function() { 
       var tween_move_in2:Tween = new Tween(_root["movie_"+(index+1)], "_x", Strong.easeOut, 1600, 150, 0.5, true); 
     }; 
    } 
    ,2000);//end of setTimeout 
};//end of tween.onMotionFinished 
+0

Aussi la page de référence pour la classe tween a aidé. http://www.adobe.com/livedocs/flash/9.0/ActionScriptLangRefV3/fl/transitions/Tween.html –

Répondre

0

Si vous essayez de tracer tween_move_1, vous pouvez consulter directement à l'intérieur du setTimeout().

+0

Thx ceci avec le conseil de Daniel ci-dessous m'a indiqué dans la bonne direction. –

0

ok, voici ce qui se passe ...

lorsque vous utilisez new function() {this} comme dans SetTimeout(function() { etc.

Cela crée une objet vide (indéfini), cet objet n'est pas le même que l'objet qui appelle la fonction

Bien que je ne puisse pas vous dire ce que vous devriez faire, car je ne sais pas ce que vous essayez de faire, J'espère que ça aide vous le comprendre.

vous pouvez cependant soit référencer la fonction (var foo: Fonction ...) et passer une variable foo ($ var: Type)

0

Si le this particulier que vous voulez passer est celui qui est disponible à la portée où vous avez défini tween_move_1, puis créez une autre variable locale, remplissez-la avec this et utilisez cette nouvelle variable à la place.

var tween_move_1:Tween ... 
var foo:* = this; 
... 
    setTimeout(function() { 
     trace(foo);