我有2.5D游戏,因此我无法将所有碰撞对象放在movieclip容器中,因为我需要将它们保存为单独的显示对象。我在舞台上有多个实例。我不想写所有对象的所有hitTest代码:
if (player.hitTestObject(object1)
if (player.hitTestObject(object2)
if (player.hitTestObject(object2)... etc
所以我想知道如何在一个代码中hitTest
所有这些实例。我在舞台上添加了实例名称,因此它们不是变量,也不是使用addChild
代码添加的。
答案 0 :(得分:1)
有很多方法可以减少它的繁琐。我将展示一些:
制作一个容器。您可以创建一个容器影片剪辑并将所有对象放入其中。之后这些对象仍然是单个对象(根据您在问题中的原因,不想走这条路线)。然后,您可以迭代该影片剪辑的所有子项:
var i:int = container.numChildren;
while(i--){
if(player.hitTestObject(container.getChildAt(i) as DisplayObject)){
//hit, do something
}
}
将所有对象放入数组中,然后遍历该数组:
//when you app starts:
var objectArray:Array = [object1,object2,object3]//etc.
//OR, if you have say object1 - object20, you could do something like this:
//vector is basically the same as an array except every item has to be of the same type (on inherit from it)
var objectArray:Vector.<DisplayObject> = new Vector.<DisplayObject>();
for(var i:int=1;i<=20;i++){
var obj:DisplayObject = this.getChildByName("object" + i) as DisplayObject;
if(obj) objectArray.push(obj);
}
//THEN, later, when you do your hit test:
var i:int = objectArray.length;
while(i--){
if(player.hitTestObject(objectArray[i])){
}
}