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



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值