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編寫我的遊戲。最高的方法門檻會爲此目的工作嗎?我知道新的命中測試只對測試盒進行測試。 –