我已经创建了一个每1秒钟启动一次的计时器。 这是代码每1秒发生一次。
var Random_Value_X:Number = Math.ceil(Math.random() * 1500);
var Random_Value_Y:Number = Math.ceil(Math.random() * 2000);
var enemy:MovieClip = new AI(stage);
addChild(hero);
enemy.x = Random_Value_X;
enemy.y = Random_Value_Y;
确定。然后我得到了一个名为AI的课程,我已经完成了它,所以AI跟随我的播放器。问题是,我需要制作一个hitTest来测试AI是否会击中另一个AI?有没有办法可以给每个新的AI一个ID?就像第一个被称为“AI1”和第二个AI2“然后我可以创建一个像If(AT1.hitTestObject(AT2 || AT3))
的代码希望你明白我要解释的内容! :)
答案 0 :(得分:0)
你应该把它们全部放在一个数组中。然后,您可以遍历数组并对每个数组执行命中测试。根据您拥有的数量,您可能需要将它们分成几组,这样您就不必每帧都进行这么多检查。
我很确定你不能只使用逻辑或者像hitTestObject这样的方法。
答案 1 :(得分:0)
考虑到你是root用户,关键字“this”指的是root。如果你创造了类“敌人”的实例,那么它的所有对象都将具有“敌人”类型。
import flash.events.Event;
// for every enemy you create, addlistener to it
// it will force to check itself with others
enemy.addEventListener(Event.ENTER_FRAME,checkHit);
// this function will be available to all enemies
// will inform itself that it is hiting enemy instance
function checkHit(e:Event){
// for e.g. object is moving in x direction
// to keep it simple so you can run it in new file
// with two object one is called enemy and other enemy1
// in your case its changing position
e.target.x += 1;
// loop with all children, break when hit someone
for(var i:uint=0;i<this.numChildren;i++){
// in current situation e.target is also a child of root
// therefore avoid checking it
if(e.target==this.getChildAt(i)) continue;//trace("Its me");
// if hit
// currently testing hit with all objects on stage
// you can change it to check specific type
if(e.target.hitTestObject(this.getChildAt(i))){
trace("I got hit by: "+this.getChildAt(i).toString());
break;
}
}
}