1

我正在做一个游戏项目,我正在研究游戏的AI方面。我希望敌方物体在玩家瞄准敌人时开始瞄准和射击,并且我碰到了这篇文章: http://www.emanueleferonato.com/2007/04/29/create-a-flash-game-like-security-part-2/AS3视线不使用hittest对象。

我的问题是你可以做同样的事情吗?没有使用实际的线?你可以使用一个命中测试点,并基本上定义一条线?或者其他一些方法,而不需要在舞台上实际放置一个物体。

我试图让事情尽可能高效,如果可能的话,不想使用这种方法。如果你有一些建议,或代码或链接到有用的资源,我将不胜感激!

回答

3

只需使用计算,而不是线

这是重要的代码

dist_x = _root.hero._x-_x; 
dist_y = _root.hero._y-_y; 
dist = Math.sqrt(dist_x*dist_x+dist_y*dist_y); 
angle = Math.atan(dist_y/dist_x)/(Math.PI/180); 
if (dist_x<0) { 
    angle += 180; 
} 
if (dist_x>=0 && dist_y<0) { 
    angle += 360; 
} 
wall_collision = 0; 
for (x=1; x<=dist; x++) { 
    point_x = _x+x*Math.cos(angle*Math.PI/180); 
    point_y = _y+x*Math.sin(angle*Math.PI/180); 
    if (_root.wall.hitTest(point_x, point_y, true)) { 
     wall_collision = 100; 
     break; 
    } 
} 

如果wall_collision = 100,玩家就在眼前缔约方会议。尽管如此,我只是使用布尔值。

+0

真棒谢谢你!这非常有帮助。 :),我不得不同意布尔上的你。我不确定为什么它是这样写的。 –

+0

他使用它作为该行的alpha值,这就是为什么。 顺便说一句,你知道这是用AS2编写的吗? – Creynders

+0

哦,就是这样。 :)和雅我知道这是AS2所有属性的下划线。我正在用as3编写我的游戏。最高的方法门槛会为此目的工作吗?我知道新的命中测试只对测试盒进行测试。 –