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];
}
感謝您的回覆。
爲什麼不只是在你的精靈上運行兩個動作?一個會改變它的位置,第二個會改變動畫幀 – Morion
是的,這是訣竅。謝謝! – Dandan
作爲第二個問題,我使用創建NSDictionary來保存多個動畫框架並在需要時使用它們來管理動畫的最佳方法?或者我應該在每次玩家步驟後創建動畫幀,然後銷燬它們? – Dandan