0

我正在做一个小游戏,在这个游戏中,我有两个 menuitem 按钮,一个用于跳跃,一个用于滚动,我使用 ccjump 实现了跳跃功能但无法实现滚动功能,为此我使用了 ccrotate 功能,它可以部分工作,可以任何人都可以帮助我解决这个问题...在此先感谢

这是我的滚动代码

id action= [CCRotateBy actionWithDuration: 0.2 angle:-130];
[mysprite runAction:action];

谁能给我确切的解决方案???????

4

1 回答 1

1

好的,要模拟精灵“滚动”的效果,您必须结合旋转和平移。为了令人信服,您必须获得正确的平移量,以使身体不会出现与平移不同步的旋转,例如旋转过快或过慢而无法移动量。您可以通过反复试验来确定移动的距离,或者如果精灵几乎是圆形的,您可以相当精确地计算它。

对于一个完美的圆(最简单的情况),当它沿着地面滚动时,滚动的距离等于半径乘以旋转的弧度。所以对于一个完整的旋转,移动的水平距离将是 2*pi*r。对于部分旋转,在您的情况下为 130 度,对于圆形精灵,行进的水平距离将为 -130 * (pi/180) * sprite.contentSize.width/2。pi/180 用于将度数转换为弧度。对于一个不完美的圆圈,这个公式会让你接近,但你可能需要调整它才能得到正确的外观。所以回顾一下,连同一些示例代码,你的方法可能是这样的:

float radius = mySprite.contentSize.width/2;
float radians = CC_DEGREES_TO_RADIANS(-130);
float distance = radians * radius;

CCRotateBy *rotateAction = [CCRotateBy actionWithDuration:0.2 angle: -130];
CCMoveBy *moveAction = [CCMoveBy actionWithDuration:0.2 position:ccp(distance, 0)];
CCSpawn *spawnAction = [CCSpawn actionOne:rotateAction two:moveAction];

[mySprite runAction:spawnAction];
于 2012-12-27T13:14:17.067 回答