0

スプライトシートから基本的なアニメーションを作成しようとしています。オンラインでフォローしていたチュートリアルからほとんどのフォーマット/コードを取得しましたが、それは一方向の動きしかしませんでした. 基本的に、スプライトを適切なアニメーションでタッチの方向に「歩く」ようにする4つの異なるアニメーションを探しています。私は多くの投稿やチュートリアルを見てきましたが、どれも概念をより明確にしたり、私のエラーを指摘したりしていないようです.

私は4つのアニメーションの4セットを持っています。基本方向ごとのセット (上、下、左、右のラベル)。

私のスプライトシートは次のように設定されています:

注: これらの個々のファイルに基づいて自動的に生成された *plist ファイルもあります

[player1.png] [player2.png] [player3.png] [player4.png] //Walking down animations

[player5.png] [player6.png] [player7.png] [player8.png] //Walking left animations

[player9.png] [player10.png] [player11.png] [player12.png] //Walking right animations

[player13.png] [player14.png] [player15.png] [player16.png] //Walking up animations

HelloWorldLayerActionsの関数でこれらを作成しようとするこのコード:init

注: このコード ブロックは、クラッシュする場所です!! ここのどこにあるのか完全にはわかりませんが、エラー情報も以下にあります!

//Store the sprite info in cahce
[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"player.plist"];

//Load the spritesheet into a BatchNode
CCSpriteBatchNode *spriteSheet = [CCSpriteBatchNode batchNodeWithFile:@"player.png"];
[self addChild:spriteSheet];

//Create frame arrays and store the appropriate .png sets
NSMutableArray *walkPlayerRightFrames = [NSMutableArray array];
NSMutableArray *walkPlayerLeftFrames = [NSMutableArray array];
NSMutableArray *walkPlayerUpFrames = [NSMutableArray array];
NSMutableArray *walkPlayerDownFrames = [NSMutableArray array];

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

     [walkPlayerLeftFrames addObject:
        [[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:
           [NSString stringWithFormat:@"player%d.png", i+4]]];

     [walkPlayerRightFrames addObject:
        [[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:
           [NSString stringWithFormat:@"player%d.png", i+8]]];

     [walkPlayerUpFrames addObject:
        [[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:
          [NSString stringWithFormat:@"player%d.png", i+12]]];
}


//These are of type "CCAnimation" and are declared in the header with appropriate @property stuff
_walkPlayerUp = [CCAnimation
                             animationWithSpriteFrames:walkPlayerUpFrames delay:0.1f];

_walkPlayerRight = [CCAnimation
                             animationWithSpriteFrames:walkPlayerRightFrames delay:0.1f];

_walkPlayerLeft = [CCAnimation
                             animationWithSpriteFrames:walkPlayerLeftFrames delay:0.1f];

_walkPlayerDown = [CCAnimation
                             animationWithSpriteFrames:walkPlayerDownFrames delay:0.1f];

//Declare a starting image and starting position        
self.player = [CCSprite spriteWithSpriteFrameName:@"player1.png"];
self.player.position = ccp(100, 100);

//Set an action for when the player runs        
[self.player runAction:self.walkAction];

//Add player to the spriteSheet
[spriteSheet addChild:self.player];

self.touchEnabled = YES;

エラー情報:

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Argument must be non-nil'
*** First throw call stack:
(0x250d012 0x1eeae7e 0x250ce78 0x160b665 0x5c2a0 0xdf42f 0x59495 0xde9e2 0xe16f1 0x1efe663 0xbfa29 0xbe07a 0x5bfb4 0x32272 0xb44b8 0x15b4fb4 0x15ecb1a 0xb4c4c 0xddbaf 0xb5392 0xb8829 0xb0a2dd 0x1efe6b0 0x3cafc0 0x3bf33c 0x3caeaf 0xba92bd 0xaf1b56 0xaf066f 0xaf0589 0xaef7e4 0xaef61e 0xaf03d9 0xaf32d2 0xb9d99c 0xaea574 0xaea76f 0xaea905 0xaf3917 0xde183 0xab7157 0xab7747 0xab894b 0xac9cb5 0xacabeb 0xabc698 0x3215df9 0x3215ad0 0x2482bf5 0x2482962 0x24b3bb6 0x24b2f44 0x24b2e1b 0xab817a 0xab9ffc 0xdd9b6 0x1f35 0x1)
libc++abi.dylib: terminate called throwing an exception
4

1 に答える 1

0

うーん、これは私のばかげたことでした。幸いなことに、SpriteSheet 操作を正しく行っていました。

次の行を削除する必要がありました:

     [self.player runAction:self.walkAction];

CCAction walkAction後で画面にタッチするまで初期化しないため、この行self.walkActionnilデフォルトでクラッシュしていました。

于 2013-05-18T17:58:11.093 に答える