cocos2d中的旋转和直线移动(角度,弧度)

一:前提: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  (

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]];        



你可能感兴趣的:(cocos2d中的旋转和直线移动(角度,弧度))