2012-10-29 32 views
0

任何人都可以提供任何暗示做出主循環動畫的最明智的方式?我不想使用CCAnimation,因爲我想逐幀控制動畫。主循環中的Cocos2d動畫

我是否應該爲數組中的每個單獨的幀存儲精靈矩形(相對於精靈表)?然後在每個動畫步驟中查找適合的矩形?我試圖找出CCAnimation如何做到這一點,但我沒有成功......

  1. 如何在初始化時獲得每幀的矩形?
  2. 如何在每個動畫步驟設置矩形?
  3. 我需要使用CCSpriteBatchNode嗎?我想不是,呃?

回答

0

不能理解,爲什麼你不想使用CCAnimation,但無論如何,爲了回答你的問題,你可以檢查CCSprite實例的創建代碼。然後,檢查CCSpriteFrame實例的創建。在那裏你會發現至少你的第一個問題的答案。實際上,如果您只是想要與CCAnimate不同地管理動畫幀,您可以只存儲CCSpriteFrames數組並按需要顯示它們(在CCAnimate動作中,這些幀只是在相同的時間間隔內逐個更改)。

如果您不想顯示多個動畫幀,則使用CCSpriteBatchNode是否沒有區別。如果您需要畫一個紋理的幾個部分,它可以節省大量的處理器時間,因爲它會在一個draw調用中繪製它們,而不是向所有這些精靈發送draw消息。

0

當你想通過我認爲使用CCSpriteBatchNode是因爲它給你使用像「Zwoptex」任何工具精靈animation.Making plist中的幀接入幀是更好的選擇幀動畫精靈幀會給出一個有效的方法使用CCSpriteBatchNode進行動畫處理。

希望你知道使用CCSpriteBatchNode的plist文件的動畫。

0

我與來自Morions答案靈感如下: 在遊戲中打勾功能:

_animationFrames.legFrame = (_animationFrames.legFrame + 1) % _animationFrames.legFrames.count; 

[_legs setDisplayFrame: [_animationFrames.legFrames objectAtIndex: _animationFrames.legFrame]]; 

而在初始化函數:

CCSpriteBatchNode *spriteSheet = [CCSpriteBatchNode 
            batchNodeWithFile:@"Player.png"]; 
[self addChild:spriteSheet]; 

_animationFrames.legFrames = [[NSMutableArray array] retain]; 
for(int i = 0; i <= 15; ++i) 
{ 
    [_animationFrames.legFrames addObject: 
    [[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName: 
    [NSString stringWithFormat:@"Player_legs-%d.png", i]]]; 
} 

_legs = [CCSprite spriteWithSpriteFrameName:@"Player_legs-0.png"]; 
[_sprite addChild: spriteSheet]; 
[spriteSheet addChild:_legs z:1];