8方向人物尋路到NPC后角色朝向問題

8方向人物尋路

一般來說,遊戲角色自動尋路尋找某位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);//面向下
		}
	}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章