3

我正在用 cocosbuilder2.1、cocos2d 2.0 制作 CCSprite 旋转动画。它在 iPhone4S(iOS 8.0.2)、iPhone5 Simulator、iPad 2 Simulator、iPad Retina Simulator 上运行良好,但在 iPhone5S(iOS 7.1.1)、iPhone5S Simulator、iPad Air Simulator、iPhone 6 Simulator、iPhone 上有“抖动”问题6加模拟器。构建设置如下:

在目标下的构建设置中:

基础 SDK = 最新 iOS (iOS 8.0);有效架构 = arm64 armv7 armv7s

一般在目标下:

部署目标 = 6.0

一开始我以为是cocosbuilder的bug,但是通过手动让精灵旋转测试后也出现了同样的问题,感觉cocos2d 2.0对iPhone5S的兼容性有问题。

代码:在第一个场景的图层中

-(void)onEnter {
    [super onEnter];
    ...//play music
    ...//load image resources
    CCSprite *testSprite = [CCSprite spriteWithSpriteFrameName:@"testIMG.png"];
    testSprite.position = ccp(200,200);
    [self addChild:testSprite];
    CCRotateBy *rotateAction = [CCRotateBy actionWithDuration:3 angle:360];
    [testSprite runAction:rotateAction];
    ...//other stuff, nothing related with CCBReader or cocosbuilder
}

“抖动”问题就好像 testSprite 的旋转值已设置为 0 每帧,它已设置为正确的值。例如,它就像旋转到 1,然后回到 0,然后到 2,然后再回到 0、3、0、4、0 ……等等。所有这些都发生得非常快,这使它有点“闪烁”。最后旋转总是重置为0。

我尝试了谷歌它,但没有发现任何相关,好像这是一个非常个人的问题。如果这是个人问题,请告诉我应该朝哪个方向努力以找到错误所在,谢谢!

4

1 回答 1

14

虽然现在仍然确定是什么导致了这个问题,但我通过将 Valid Architectures 更改为 armv7 来解决它。此构建设置不会利用 iPhone4S 之后的设备上的新架构,但至少不会导致抖动问题。

==============更新=================

我发现了与此问题相关的警告。“名为‘setRotation’的多个方法”参见相关问题:ARC语义问题“名为‘setRotation’的多个方法”,仅归档时

虽然我已经将旧项目的 cocos2d 升级到 v2.2 版本(太复杂,无法更新到 v3),但我仍然收到警告。

最后我在 CCBAnimationManager.m 中使用类型转换来解决它

@implementation CCBRotateTo
-(void)startWithTarget:(CCNode *)aTarget
{
    [super startWithTarget:aTarget];
    starAngle_ = [(CCNode *)self.target rotation];
    diffAngle_ = dstAngle_ - startAngle_;
}

-(void)update:(ccTime)t
{
    [(CCNode *)self.target setRotation: startAngle_ + diffAngle_ * t];
}

有了这个改变,现在我也可以支持 arm64 了。

于 2014-10-16T06:08:22.910 回答