我正在做一个小游戏,在这个游戏中我有两个menuitem按钮,一个用于跳跃,一个用于滚动,我使用ccjump实现跳跃功能但是我无法实现滚动功能,为此我使用了ccrotate功能它工作部分地,任何人都可以帮我解决这个问题...提前致谢
这是我的滚动代码
id action= [CCRotateBy actionWithDuration: 0.2 angle:-130];
[mysprite runAction:action];
任何人都可以给我准确的解决方案?????????
答案 0 :(得分: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];