0

ここに私のシーンの問題があります: メニュー シーンから始めて、ゲーム内シーンに入り、キャラクターが死んだら、再びメニュー シーンに行きます。

[[CCDirector sharedDirector] replaceScene:[MainMenu scene]];

[[CCDirector sharedDirector] replaceScene:[InGame scene]];

ゲームに負けた後、ゲームに戻ろうとすると、SpriteSheet が次のエラーでクラッシュします。

'CCSprite is not using the same texture id'

アニメーションを開始する方法は次のとおりです。

- (void) initSprite:(NSString *)plist andTexture:(NSString *)texture_ {

[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:plist];

spriteSheet = [CCSpriteBatchNode batchNodeWithFile:texture_];

NSMutableArray *walkAnimFrames = [NSMutableArray array];

for (int i=1; i<=12; i++) {
    [walkAnimFrames addObject:
     [[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:
      [NSString stringWithFormat:@"%d.png",i]]];
}

CCAnimation *walkAnim = [CCAnimation animationWithSpriteFrames:walkAnimFrames delay:0.05f];

texture = [CCSprite spriteWithSpriteFrameName:@"1.png"];
walkAction = [CCRepeatForever actionWithAction: [CCAnimate actionWithAnimation:walkAnim]];
[texture runAction:walkAction];

texture.position = position;
texture.tag = HeroType;
[spriteSheet addChild:texture];

[self addChild:spriteSheet];
}

スプライト シートにテクスチャを追加すると、クラッシュが発生します。

[spriteSheet addChild:texture];

問題はテクスチャの割り当て解除にあると思います..

ARCは使いません。

4

1 に答える 1

1

おそらく、キャッシュに「1.png」があり、これは、終了-再起動シーケンスの前に作成された別のアニメーションに対応しています。再起動する前に、スプライト フレーム キャッシュ (およびその他の多くのもの) を消去したい場合があります。

「1.png」から「NNNN.png」までは完全に避けています。おそらくすべてのアニメーションに含まれているからです。代わりに、次のようなものを使用します:

walk_classKey_upNNNN.png {up,down,left,right,idle,jump ... および必要なその他のマップ スタンス) fight_classKey_strikeNNNN.png {strike,hurt,dead ... 例)

classKey は {fighter,rogue, ... etc ... 固有の兵士タイプ)

そして、私は自分のplists/texturesに同じ名前を付けます

walk_fighter_up-hd.plist (テクスチャ パッカーを使用して、plist にテクスチャ名が埋め込まれます)。fight_rogue_cheapShot-hd.plist (cheapShot は、現在のゲームにおけるローグのスキルの 1 つです)。

于 2013-08-24T22:28:32.570 に答える