一:前提:cocos里边以顺时针为正方向,所以所有的度数按以前的习惯求出来后都要求反
cocos只能处理-180~180的度数范围,所以求出来的度数始终是这个范围(cocos里用反正切来求度数可以保证度数在这个范围)
弧度定义是长度等于半径的弧所对应的角度值为1弧度。所以360度=2pi 1弧度=180/pi 度
制作需要旋转的精灵图片是总是让初始方向朝右,即和0度吻合,这样求旋转角度的时候比较简便。(即假定初始边为0度)
二:质点移动,p1是炮塔,p2是p1发射的子弹,假设在时刻t1子弹在p2点,求1秒后子弹的位置p3
假设子弹速度320,也就是说p2p3=320
已知p1(100,100), p2(270,200),p2p3=320,求p5
1.首先求p1p2长度
2.求角度:cos(a)=0.85,sin(a)=0.5 (<a=30度左右)
3.求p5, p5.x=p2.x+p2p3*cos(a) p5.y=p2.y+p2p3*sin(a)
具体到cocos里边就是这样的:
CGPoint shootVector = ccpSub(self.target.position, self.position);//1距离
CGPoint normalizedShootVector = ccpNormalize(shootVector);//2角度(cos(a)和sin(a))
CGPoint overshotVector = ccpMult(normalizedShootVector, 320);//3新距离=角度*射程
CGPoint offscreenPoint = ccpAdd(self.position, overshotVector);//4新坐标=p1+新距离
[self.nextProjectile runAction:[CCMoveTo actionWithDuration:delta position:offscreenPoint]
二:质点旋转
CGPoint waypointVector = ccpSub(waypoint.position, self.position);//1第二条边(第一条为0度)
CGFloat waypointAngle = ccpToAngle(waypointVector);//2两边夹角度数
CGFloat cocosAngle = CC_RADIANS_TO_DEGREES(-1*waypointAngle);//3纠正方向,度数转为弧度
float rotateSpeed = 0.5 / M_PI; // 1/2 second to roate 180 degrees//设定旋转速度
float rotateDuration = fabs(waypointAngle * rotateSpeed); //根据速度和角度计算需要的时间
[self runAction:[CCSequence actions:
[CCRotateTo actionWithDuration:rotateDuration angle:cocosAngle],
nil]];