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);//面向下
		}
	}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值