一般來說,遊戲角色自動尋路尋找某位npc,爲了顯得更自然,都會走到目標npc附近,而不是npc所在的座標點,這時尋路後人物的朝向往往便無法保證。
如今很多的遊戲,人物都會有八個方向,爲了讓遊戲更加逼真,在尋路到npc附近時,需要讓角色朝向npc,那麼如何確定人物朝向呢?我們可以根據角色和npc與Y周之間的夾角來判斷。
當角色在目標npc的75~105度位置則角色應該朝向左邊,在15~75時,則應該朝向左上方,如此類推。那麼問題其實可以化爲簡單的平面數學問題。
在一平面內,角色座標p1(x1,y1,) npc座標p2(x2,y2)
我們以npc的座標爲參考系,那麼p2將變爲(0,0), p1將變爲(x1-x2,y1-y2),我們可以將p1視爲一向量,求向量的角度
var angle:Number = Math.atan2(p1.x,p1.y);
求出來的angle是弧度值,還需要轉爲爲角度
angle = angle*(180/Math.PI) 這樣就可以根據角度判定角色的朝向了
var vMyX:Number = _px;
var vMyY:Number = _py;
var vNpcX:Number = _dx;
var vNpcY:Number = _dy;
vMyX -= vNpcX;
vMyY -= vNpcY;
vNpcX = 0;
vNpcY = 0;
var angle:Number = Math.atan2(vMyX,vMyY);
angle = angle*(180/Math.PI)
if(angle<0){
//在左邊
if(angle>-15){
setDir(4);//面向上
}
if(angle<=-15 && angle>=-75){
setDir(5);//面向右上
}
if(angle< -75 && angle>=-105){
setDir(6);//面向右
}
if(angle< -105 && angle>=-165){
setDir(7);//面向右下
}
if(angle<-165){
setDir(0);//面向下
}
}else{
//在右邊
if(angle>=75 && angle<=105){
setDir(2);//面向左邊
}
if(angle>=15 && angle<75){
_setDir(3);//面向左上
}
if(angle<15){
setDir(4);//面向上
}
if(angle>105 && angle<165){
_setDir(1);//面向左下
}
if(angle>165){
setDir(0);//面向下
}
}