所以,问题如下:
我有一组对象,我想要一个函数来使用函数中集合的所有元素。我该怎么办?
例如:
我有很多同一个MovieClip的实例。我希望函数NextFrame()只对名称与我刚刚按下的键的keyCode匹配的MovieClip执行。
如何在“if”语句中一次引用所有这些符号?
答案 0 :(得分:0)
您需要使用loop。
假设您的剪辑只是放在时间轴上,那么您可以采用几种方法。
浏览显示列表并搜索符合条件的所有剪辑。 如果你在舞台上有大量的剪辑,这种方式可能会很昂贵。
var i:int=this.numChildren;
while(i--){
if(this.getChildAt(i).name == nameCriteria){
//do something here, it matches
}
}
将该类的影片剪辑保存在一个数组中,然后遍历该数组:
var myArray:Array = [mc1,mc2,mc3,mc4];//whatever your movie clips instance names are...
for each(var clip:MovieClip in myArray){
if(clip.name == nameCriteria){
//do something
}
}
创建一个自定义类,自动将此Movie Clip的任何实例添加到您循环的数组中。
将以下代码保存在.fla文件旁边名为MyKeycodeClip.as
的文件中(或任何您想要调用的文件)。
package {
import flash.display.MovieClip;
import flash.events.Event;
public class MyKeycodeClip extends MovieClip {
public static var allClips:Array = new Array();
public function MyKeycodeClip(){
this.addEventListener(Event.ADDED_TO_STAGE, addedToStage, false,0,true);
this.addEventListener(Event.REMOVED_FROM_STAGE, removedFromStage,false,0,true);
}
private function addedToStage(e:Event):void {
allClips.push(this);
}
private function removedFromStage(e:Event):void {
for(var i:int=0; i < allClips.length;i++){
if(allClips[i] == this){
allClips.splice(i,1);
return;
}
}
}
}
}
然后,您可以将该类附加到库对象。转到库对象属性,然后在类输入框中选择“Export For Actionscript”,放置:MyKeycodeClip
。
现在,无论何时将该库对象放在舞台上,该文件中的代码都会附加到它上面(它会自动从数组中添加/删除它)。你可以循环遍历每个项目:
for each(var clip:MovieClip in MyKeycodeClip.allClips){
if(clip.name == nameCriteria){
//do something
}
}