0

私が取り組んでいるプロジェクトでは、複数のキャラクターとしてプレイできます (この場合、ドローンと呼びます)。私のゲームシーンでは、_drone を介してすべての物理演算をセットアップしています。spritebuilder で作成された .CCB ファイル。以前は、このファイルを spritebuilder でアニメーション化していましたが、選択できる複数のドローンが追加されたため、適切なフレームを表示して循環するように設定する必要があります。私はこれに関連するものを一日中探していましたが、私が目にするほとんどの回答は cocos2d v2.0 に関するものであるか、Xcode でエラーが表示されないものを取得した場合、それは私の _drone クラスには適用されません。私がやろうとしているのは、次のようなものです:[_drone setSpriteFrame:[CCSpriteFrame frameWithImageNamed:@"DefectiveDroneSpriteSheet/Drone1.png"]];これにより、_drone のフレームが必要なものに設定されます。ただし、フレーム間でこのサイクルを作成する方法がわかりません。

最近、ここでその方法を示す回答を見つけました:

NSMutableArray *animationFrames = [NSMutableArray array];

for(int i = 1; i <= FRAMES; ++i)
{
    CCSpriteFrame *spriteFrame = [[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName: [NSString stringWithFormat:@"animationFrame%d.png", i]]; //
}

//Create an animation from the set of frames you created earlier
CCAnimation *animation = [CCAnimation animationWithSpriteFrames: animationFrames delay:delay];

//Create an action with the animation that can then be assigned to a sprite
CCActionAnimate *animationAction = [CCActionAnimate actionWithAnimation:animation];

CCActionRepeatForever *repeatingAnimation = [CCActionRepeatForever actionWithAction:animationAction];
[self runAction:repeatingAnimation];

残念ながら、これはうまくいきませんでしたが、何か間違ったことをしたのかもしれません。for ループに最も問題があるようでした/変数 spriteFrame が使用されないという警告、またはそのようなもの。このコードの問題は、何時間もいじり、更新されたドキュメントを見つけようとした後、最初の例が行ったことを実行する方法を理解できず、_drone に直接適用することです。とはいえ、これを解決するにはどうすればよいですか?私が見落としている別の簡単な方法はありますか?

お時間をいただきありがとうございます。

達人のために編集:

こんにちは、返信ありがとうございます。これは、私の for ループが現在どのように見えるかで、4 つの警告が表示されます。

for(int i = 1; i <= 2; ++i)
{
    CCSpriteFrame *frame1 = [[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName: [NSString stringWithFormat:@"DefectiveDroneSpriteSheet/Drone1.png", i]]; //
    CCSpriteFrame *frame2 = [[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName: [NSString stringWithFormat:@"DefectiveDroneSpriteSheet/Drone1.png", i]]; //
}

「フレーム 1 とフレーム 2 の未使用の変数」と「i」の「フォーマット文字列で使用されていないデータ引数」という警告が表示されます。また、これを行うと、このアニメーションを _drone オブジェクトに適用するにはどうすればよいですか? Spritebuilder を介してオブジェクトが既にシーンに配置されているためですか?


2 番目の編集:

- (void)didLoadFromCCB {

    NSMutableArray *animationFrames = [NSMutableArray array];

    for(int i = 1; i <= 2; ++i)
    {
        CCSpriteFrame *spriteFrame = [[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName: [NSString stringWithFormat:@"DroneSpriteSheets%d.png", i]]; //
        [animationFrames addObject: spriteFrame];
    }

    //Create an animation from the set of frames you created earlier
    CCAnimation *animation = [CCAnimation animationWithSpriteFrames: animationFrames delay:1.0f];

    //Create an action with the animation that can then be assigned to a sprite
    CCActionAnimate *animationAction = [CCActionAnimate actionWithAnimation:animation];

    CCActionRepeatForever *repeatingAnimation = [CCActionRepeatForever actionWithAction:animationAction];
    [_drone runAction:repeatingAnimation];

    //-----------------------------------------------------------

それが私のコードの関連部分です。次のエラーが発生します。

* キャッチされない例外 'NSInvalidArgumentException' が原因でアプリを終了します。理由: '* -[__NSArrayM insertObject:atIndex:]: オブジェクトを nil にすることはできません'

4

1 に答える 1

0

配列にフレームを追加していません:

for(int i = 1; i <= FRAMES; ++i)
{
    CCSpriteFrame *spriteFrame = [[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName: [NSString stringWithFormat:@"animationFrame%d.png", i]]; //
    [animationFrames addObject: spriteFrame];

}
于 2014-02-21T05:40:30.927 に答える