一般来说,游戏角色自动寻路寻找某位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) 这样就可以根据角度判定角色的朝向了

[javascript] view plain copy
  1. var vMyX:Number = _px;  
  2. var vMyY:Number = _py;  
  3. var vNpcX:Number = _dx;  
  4. var vNpcY:Number = _dy;  
  5. vMyX = -vNpcX;  
  6. vMyY = -vNpcY;  
  7. vNpcX = 0;  
  8. vNpcY = 0;  
  9. var angle:Number = Math.atan2(vMyX,vMyY);  
  10. angle = angle*(180/Math.PI)  
  11. if(angle<0){  
  12. //在左边  
  13.     if(angle>-15){  
  14.         setDir(4);//面向上  
  15.     }  
  16.     if(angle<=-15 && angle>=-75){  
  17.         setDir(5);//面向右上  
  18.     }  
  19.     if(angle< -75 && angle>=-105){  
  20.         setDir(6);//面向右  
  21.     }  
  22.     if(angle< -105 && angle>=-165){  
  23.         setDir(7);//面向右下  
  24.     }  
  25.     if(angle<-165){  
  26.         setDir(0);//面向下  
  27.     }  
  28. }else{  
  29. //在右边     
  30.     if(angle>=75 && angle<=105){  
  31.         setDir(2);//面向左边  
  32.     }  
  33.     if(angle>=15 && angle<75){  
  34.         _setDir(3);//面向左上  
  35.     }  
  36.     if(angle<15){  
  37.         setDir(4);//面向上  
  38.     }  
  39.     if(angle>105 && angle<165){  
  40.         _setDir(1);//面向左下  
  41.     }  
  42.     if(angle>165){  
  43.         setDir(0);//面向下  
  44.     }  
  45. }  

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-01-29
  • 2021-11-15
  • 2021-09-11
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2021-06-12
  • 2021-07-30
  • 2022-12-23
  • 2021-06-10
  • 2022-01-26
  • 2022-02-07
相关资源
相似解决方案