2014年10月25日土曜日

(一応解決)Yosemite非互換:cocos2dのCCRotateByがおかしい(^_^;)

OS X Yosemite環境下のXcode Version 6.1 (6A1052d)でcocos2d 1.0.1使用アプリをビルドするとCCRotateByの挙動(正常に回転しない)がおかしい件ですが、対処法が分かりました。

原因特定のためテスト用コードにてCCActionの組み合わせを変えたりしましたが全然ダメで、ビルド設定をいろいろ試行したところ運良く原因を特定する事ができました。(^^)v

<不具合対処>
1.Targetビルド設定
 Architectures → BaseSDKの設定値を「OS X 10.10」→「OS X 10.9」に変更。

原因としてはYosemite(OS X 10.10)SDKでビルドするとCCRotateBy動作不正が発生するが、Mavericks(OS X 10.9)SDKでは発生しない。

と言うことでBaseSDKを「OS X 10.9」に設定する事で今回は対処出来ましたが、今後も古いSDKを利用し続ける訳には行かないのでどっかのタイミングで抜本的な対応が必要になるかも知れませんね〜 (^^ゞ

しかし、状況的にはYosemite(OS X 10.10)SDKのバグっぽい挙動とも言えますので、バグであればアップルの修正で万事解決なんですけど、どうなることやら。。。

ではまた〜

1 件のコメント:

  1. (完全解決:2016/10/3)
    cocos2d 1.0.1ライブラリ:CCActionInterval.m
     ①@implementation CCRotateTo
     ②@implementation CCRotateBy

    <原因・対処>
    ・”target_”変数の”rotation”参照が重複定義ワーニングが発生しているので、”rotation”参照を一意にするため”target_”変数をクラス型でキャストする。

    <修正前>
    -(void) startWithTarget:(id)aTarget
    {
    [super startWithTarget:aTarget];
    startAngle_ = [target_ rotation];
    }

    -(void) update: (ccTime) t
    {
    // XXX: shall I add % 360
    [target_ setRotation: (startAngle_ +angle_ * t )];
    }

    <修正後>
    -(void) startWithTarget:(id)aTarget
    {
    [super startWithTarget:aTarget];
    startAngle_ = [(CCNode*)target_ rotation];
    }

    -(void) update: (ccTime) t
    {
    // XXX: shall I add % 360
    [(CCNode*)target_ setRotation: (startAngle_ +angle_ * t )];
    }

    返信削除