1

現在、文字のあるタイルのボードがあるシーンのあるゲームに取り組んでいます。タイルは、動的ボード上の配置と「文字値」により、実行時に配置されます。

CCScene (fullscreen)
  CCLayer (board)
    CCNodes (tiles)

Tile.ccb という名前の ccb ファイルを作成しました。これは、背景グラデーションと TTF レイヤーを備えた小さくてシンプルな CCNode です。CCNode には「Touched」というタイムラインがあり、ユーザーがタイルに触れたときに再生される短いアニメーションが含まれています。ノードには、カスタム クラス セットもあります。(STタイル)

現在、次の方法ですべてのタイルをプログラムでロードしています。

+ (STTile *)tileWithLetter:(NSString *)letter onRow:(int) x andCol: (int) y;
{
    STTile *tile = (STTile *)[CCBReader nodeGraphFromFile:@"Tile.ccbi"];
    tile.letterLabel.string = letter;
    tile.x = x;
    tile.y = y;
    return tile;
}

ボード上の位置の新しいタイルを作成して返します。Cocos2D (Objective-C) では、STTile は CCNode のサブクラスです。

タイルが表示され、letterLabel を適切に調整できます。ただし、アニメーション「Touched」の再生は機能しません。次のコードは STTile の一部であり、タッチ時にアニメーション/シーケンスを再生するために使用されます。

CCBAnimationManager *animationManager = self.userObject;
[animationManager runAnimationsForSequenceNamed:@"Touched"];

「self.userObject」の値 (CCAnimationManager を保持する) は、ロード直後に [CCBReader nodeGraphFromFile] によって「クリーンアップ」されるため、NULL です。これは設計によるものですか?もしそうなら、なぜですか?CocosDragon の例に見られるように、タイル ノードが「デザイン タイム」に「ボード」レイヤーに配置されている場合、アニメーション化のための同じコードは問題なく機能します。(CCB 内の CCBFile 参照)

実行時に CCB ノードの複数のインスタンスを作成し、それらでアニメーションを実行できるようにするにはどうすればよいですか? 設計時にノードを配置することは、常にオプションとは限りません。前もって感謝します!

4

1 に答える 1

0

@Matthijnは正しいです!ありがとう!

私の場合、CocosBuilder のカスタム クラスの名前と私のコードの間でクラス名が一致しないことが原因でした。

カスタムクラスの名前に注意してください

于 2013-09-25T15:24:42.560 に答える