0

Cocos2d 2.1rc0 を使用しています。

CCSpriteBatchNode を使用していないときに完全に機能していたこのプロジェクトがあります。次に、バッチ ノードを使用してドロー コールを減らすことにしたところ、問題が発生しました。

多くのことがうまく機能していません。reorderChild は 1 つです。もう 1 つは runAction で、runAction がなければ Cocos は役に立ちません。

これは、batchNodes なしで機能し、batchNodes では機能しないメソッドの例です。

// move/rotate all objects

for (int i=0; i<[allObjects count]; i++) {

        Card *object = [allObjects objectAtIndex:i];
        [object stopAllActions];

        CGPoint center = object.position;
        center.x = center.x + 100;
        center.y = center.y - 200;

        CCMoveTo *moveAction = [CCMoveTo actionWithDuration:0.3f position:ccp(center.x, center.y)];
        CCRotateTo *rotateAction = [CCRotateTo actionWithDuration:0.3 angle:0.0f];

        CCSpawn *action = [CCSpawn actions:moveAction, rotateAction, nil];

        [object runAction:[CCSequence actions: action,
                             [CCDelayTime actionWithDuration:0.1f],
                             nil]];
}

まったく何も起こりません。

CCSpanw を排除し、移動だけで runAction を直接使用しようとしましたが、何も機能しません。通常のスプライトを使用すると機能します。

その配列内のオブジェクトは、CCSprite ベースのクラスから派生します。

回避策はありますか?

4

2 に答える 2

1

解決策は、配列から抽出されたオブジェクトにクラスをキャストすることです...

それ以外の

Card *object = [allObjects objectAtIndex:i];

これ

Card *object = (Card *)[allObjects objectAtIndex:i];
于 2013-02-27T15:50:11.283 に答える
0

クリーンなプロジェクトで、これが何らかの奇妙な副作用ではないことを再確認した後、あなたのプロジェクトには何か怪しいものがあると言わざるを得ません。しかし、何を言うのは難しい。

私がしたこと:スプライトバッチを作成し、それにスプライトを追加し、配列に格納します。スケジュールされたメソッドで、配列からスプライトを受信し(キャストではありません)、上記のアクションシーケンスを実行します。期待どおり、正常に動作します。

キャスティングは何の違いも生じないはずです。バッチ処理されたスプライトまたはバッチ処理されていないスプライトも違いを生むべきではありません。

もしそうなら、本当に奇妙なことが起こっています。結局のところ、カードオブジェクトはキャストの有無にかかわらず同じです。runActionメソッドを実際に実行していない場合は、「認識されないセレクターがインスタンスに送信されました」というエラーが発生します。しかし、そうではありません。

デバイスとマシンを再起動し、Xcodeでプロジェクトをクリーンアップして再構築した後、キャストせずに再試行してください。また、デバッグ構成とリリース構成でテストします。上記のいずれか、そして間違いなく上記のすべてを実行した後になくなった最も奇妙な問題がありました。それでも問題が解決しない場合は、コード(メモリリークが私のお気に入りです)またはプロジェクト設定(つまり、まれなコンパイラの最適化によって副作用が発生する場合があります)に問題があることを確認できます。

実際にアクションが実行されない場合は、runActionメソッドにステップインします。アクションがアクションマネージャーに追加されると確信しています。キャストの有無にかかわらず、実際に別のコードパスが使用されているかどうかを確認してください。疑わしい。

于 2013-02-27T19:14:27.517 に答える