人物朝向问题

 float lenghtX = m_attackMonomerMajor->getPositionX() - this->getPositionX();

        //平方根函数sqrtf,根号2 等于 1.4142135623731

        float lenghtY = (m_attackMonomerMajor->getPositionY() - this->getPositionY()) * sqrtf(2);

        float lenght = sqrtf(lenghtX * lenghtX + lenghtY * lenghtY);

        float pointX = lenghtX / lenght;   //邻边/斜边

        float pointY = lenghtY / lenght;   //对边/斜边

        

        float angle_X = acosf(pointX) * 180 / M_PI;    //角度

        float angle_Y = acosf(pointY) * 180 / M_PI;

        

        float angle = angle_X;

        if (angle_Y > 90)

        {

            angle = 360 - angle_X;

        }

        

        

        /**

         

         这里要借助三角函数来判断鼠标当前相对于人物的方向,也就是要求出下图中角a的值。

         

        

         Flash的坐标系和常用的直角坐标系稍有不同,它的y轴正方向是向下的,这里要稍微注意一下。要计算角a,先求出两直角边nxny以及斜边r,然后求余弦cos(a) = nx / r,最后求反余弦并取整。取整是为了节省运算,整数运算相对于浮点运算要快得多,这在有大量运算时尤为突出。另外需要注意的是当鼠标位于x轴之上时,角a会大于180度,而反三角函数只给出0~180的解,所以需要做一个转换:a = 360 - a。详细计算代码如下:

         

         var nx:Number=mouseX-man.x;

         var ny:Number=mouseY-man.y;

         var r:Number=Math.sqrt(nx*nx+ny*ny);

         var cos:Number=nx/r;

         var angle:int=int(Math.floor(Math.acos(cos)*180/Math.PI));

         

         if(ny<0){

         angle=360-angle;

         }

         */

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值