1

私の環境はCocos2dのiPhoneです。

これを行う正しい方法はわかりませんが、スプライト アニメーションを使用してゲーム内のプレイヤーを 1 歩前進させようとしています。

まず参考までに、後のユーザーのためにアニメーションを NSDictionary にロードする init メソッドの一部を次に示します。

-(id) init
{
if( (self=[super init]) ) {
    ..
    ..
    NSMutableArray *walkUpFrames = [NSMutableArray array];
    [walkUpFrames addObject: [[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:@"player01.png"]];
    [walkUpFrames addObject: [[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:@"player02.png"]];
    [walkUpFrames addObject: [[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:@"player03.png"]];
    NSMutableArray *walkDownFrames = [NSMutableArray array];
    [walkDownFrames addObject: [[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:@"player04.png"]];
    [walkDownFrames addObject: [[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:@"player05.png"]];
    [walkDownFrames addObject: [[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:@"player06.png"]];
    NSMutableArray *walkLeftFrames = [NSMutableArray array];
    [walkLeftFrames addObject: [[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:@"player07.png"]];
    [walkLeftFrames addObject: [[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:@"player08.png"]];
    [walkLeftFrames addObject: [[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:@"player09.png"]];
    NSMutableArray *walkRightFrames = [NSMutableArray array];
    [walkRightFrames addObject: [[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:@"player10.png"]];
    [walkRightFrames addObject: [[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:@"player11.png"]];
    [walkRightFrames addObject: [[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:@"player12.png"]];

    self.walkingFrames = [NSDictionary dictionaryWithObjectsAndKeys:
                          walkUpFrames, @"up",
                          walkDownFrames, @"down",
                          walkLeftFrames, @"left",
                          walkRightFrames, @"right",
                          nil];
    ......
}
return self;
}

最初に、このコードを試してプレーヤーを移動し、スプライトを新しい位置に移動してアニメーションを実行しましたが、スプライトはすぐにその位置に移動してアニメーションを実行しましたが、これは良くありません。

-(void)setPlayerPosition:(CGPoint)position {

  CCAnimation *walkAnim = [CCAnimation animationWithFrames:[self.walkingFrames valueForKey:@"right"] delay:0.05 ];
  self.walkAction = [CCAnimate actionWithAnimation: walkAnim restoreOriginalFrame:YES];

  [_player runAction:_walkAction];
  _player.position = position;
}

CCMoveTo を使用すると思われますが、animationWithFrames で使用する方法がわかりません。何か案は?(コード例を提供してください)

-(void)setPlayerPosition:(CGPoint)position {

 self.walkAction = [CCMoveTo actionWithDuration:0.1 position:position];

 [_player runAction:_walkAction];

}

返信ありがとうございます。

4

1 に答える 1

1

ランニングmultiple actionsはうまくいきました。ありがとうモリオン……。

-(void)setPlayerPosition:(CGPoint)position
{
    CCAnimation *walkAnim = [CCAnimation animationWithFrames:[self.walkingFrames valueForKey:@"right"] delay:0.1 ];
    [_player runAction:[CCAnimate actionWithAnimation: walkAnim restoreOriginalFrame:YES]];

    [_player runAction:[CCMoveTo actionWithDuration:0.3 position:position]];
}
于 2012-11-13T06:53:36.237 に答える