AS3 AI hitTestObject与自己?

时间:2012-01-05 22:25:49

标签: actionscript-3 timer artificial-intelligence hittest

我已经创建了一个每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))

的代码

希望你明白我要解释的内容! :)

2 个答案:

答案 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;
    }
}

}