Existe-t-il un meilleur moyen d'obtenir une référence à un clip dans ActionScript en utilisant une chaîne sans eval?
-
02-07-2019 - |
Question
J'ai créé un groupe de clips qui portent tous le même nom. Après un autre événement, j'ai créé une chaîne de caractères telle que:
var clipName = "barLeft42"
qui se tient dans un autre clip appelé "chose".
J'ai pu obtenir une référence à l'aide de:
var movieClip = Eval( "_root.thing." + clipName )
Mais ça fait mal - y a-t-il un meilleur moyen?
La solution
Les clips vidéo sont des collections en actionscript (comme la plupart et similaires au javascript, tout est essentiellement constitué de paires clé-valeur). Vous pouvez indexer dans la collection en utilisant des crochets et une chaîne pour le nom de la clé, comme suit:
_root.thing[ "barLeft42" ]
Cela devrait faire l'affaire pour vous ...
Autres conseils
La meilleure façon d'éviter l'utilisation de eval
, qui est obsolète, consiste à indexer entre crochets:
var movieClip = _root.thing[ "barLeft42" ]
Mais le meilleur moyen est de conserver des références aux clips que vous avez créés et d'y accéder par référence plutôt que par nom:
var movieClipArray = new Array();
for (var i=0; i<45; i++) {
var mc = _root.thing.createEmptyMovieClip( "barLeft"+i, i );
// ...
movieClipArray.push( mc );
}
// ...
var movieClip = movieClipArray[ 42 ];
Vous pouvez utiliser des crochets et inclure des variables entre ceux-ci ... donc si vous voulez les parcourir en boucle, vous pouvez le faire:
for (var i=0; i<99; i++) {
var clipName = _root.thing["barLeft"+i];
}