2012-11-12 65 views
1

我的環境是帶有Cocos2d的iPhone。在Cocos2D中如何將精靈動畫移動一步

雖然我不確定正確的方式來做到這一點,但我試圖用精靈動畫向前移動一個遊戲中的玩家。

首先供參考,這裏是我的init方法的一部分,它將動畫加載到NSDictionary中供以後使用。

-(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]; 

} 

感謝您的回覆。

+1

爲什麼不只是在你的精靈上運行兩個動作?一個會改變它的位置,第二個會改變動畫幀 – Morion

+0

是的,這是訣竅。謝謝! – Dandan

+0

作爲第二個問題,我使用創建NSDictionary來保存多個動畫框架並在需要時使用它們來管理動畫的最佳方法?或者我應該在每次玩家步驟後創建動畫幀,然後銷燬它們? – Dandan

回答

1

運行multiple actions做到了。感謝Morion ....

-(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]]; 
}