3

cocosbuilder2.1、cocos2d 2.0でCCSprite回転アニメーションを作っています。iPhone4S(iOS 8.0.2)、iPhone5 シミュレーター、iPad 2 シミュレーター、iPad Retina シミュレーターでは問題なく動作しますが、iPhone5S(iOS 7.1.1)、iPhone5S シミュレーター、iPad Air シミュレーター、iPhone 6 シミュレーター、iPhone では「ジッタリング」の問題があります。 6 プラス シミュレーター。ビルド設定は次のとおりです。

[ターゲット] の下の [ビルド設定] で:

ベース SDK = 最新の iOS (iOS 8.0); 有効なアーキテクチャ = arm64 armv7 armv7s

ターゲットの下で一般的に:

展開ターゲット = 6.0

最初は cocosbuilder のバグかと思いましたが、回転するスプライトを手動で作ってテストした結果、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

この問題の原因はまだわかっていますが、有効なアーキテクチャを 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 に答える