私が取り組んでいるプロジェクトでは、複数のキャラクターとしてプレイできます (この場合、ドローンと呼びます)。私のゲームシーンでは、_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 にすることはできません'