2014-02-21 69 views
0

在我正在開發的項目中,我有多個角色可以玩(在這種情況下,我會將它們稱爲無人機)。在我的遊戲中,我通過_drone完成了所有物理設置。用spritebuilder創建的.CCB文件。以前我通過spritebuilder製作了這個文件,但現在增加了多個無人機可供選擇,我需要設置它來顯示和循環顯示相應的幀。我一直在尋找與此相關的事情,我看到的大多數答案都是針對cocos2d v2.0,或者當我在Xcode中顯示沒有錯誤的東西時,它不會將其應用於我的_drone類。我想要做的是這樣的:[_drone setSpriteFrame:[CCSpriteFrame frameWithImageNamed:@"DefectiveDroneSpriteSheet/Drone1.png"]];因爲這將_drone的框架設置爲我想要的。但是我不知道如何在幀之間進行這個循環。在Cocos2D和Spritebuilder中爲動畫製作雪碧

我發現這裏的答案最近,展示瞭如何做到這一點:

NSMutableArray *animationFrames = [NSMutableArray array]; 

for(int i = 1; i <= FRAMES; ++i) 
{ 
    CCSpriteFrame *spriteFrame = [[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName: [NSString stringWithFormat:@"animationFrame%d.png", i]]; // 
} 

//Create an animation from the set of frames you created earlier 
CCAnimation *animation = [CCAnimation animationWithSpriteFrames: animationFrames delay:delay]; 

//Create an action with the animation that can then be assigned to a sprite 
CCActionAnimate *animationAction = [CCActionAnimate actionWithAnimation:animation]; 

CCActionRepeatForever *repeatingAnimation = [CCActionRepeatForever actionWithAction:animationAction]; 
[self runAction:repeatingAnimation]; 

不幸的是這並沒有爲我工作,但也許我做錯了什麼。我似乎與for循環/警告說變量spriteFrame從未使用,或類似的東西最多的問題。這段代碼的問題是,經過幾個小時的混淆並試圖找到更新的文檔,我無法弄清楚如何做我的第一個例子,直接將其應用於_drone。所有這一切說...我該怎麼做才能解決這個問題?還有另一種更容易忽略的方法嗎?

感謝您的時間,非常感謝!

編輯爲大師:

你好,謝謝你的回覆。這是我的for循環看起來像目前正在拋出4個警告。

for(int i = 1; i <= 2; ++i) 
{ 
    CCSpriteFrame *frame1 = [[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName: [NSString stringWithFormat:@"DefectiveDroneSpriteSheet/Drone1.png", i]]; // 
    CCSpriteFrame *frame2 = [[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName: [NSString stringWithFormat:@"DefectiveDroneSpriteSheet/Drone1.png", i]]; // 
} 

我得到「用於幀1和幀2的未使用變量」和「不使用的格式字符串數據參數」爲「I」的警告。也是這樣做,我該如何使這個動畫適用於我的_drone對象?由於對象已經通過Spritebuilder放置在場景中?


第二個編輯:

- (void)didLoadFromCCB { 

    NSMutableArray *animationFrames = [NSMutableArray array]; 

    for(int i = 1; i <= 2; ++i) 
    { 
     CCSpriteFrame *spriteFrame = [[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName: [NSString stringWithFormat:@"DroneSpriteSheets%d.png", i]]; // 
     [animationFrames addObject: spriteFrame]; 
    } 

    //Create an animation from the set of frames you created earlier 
    CCAnimation *animation = [CCAnimation animationWithSpriteFrames: animationFrames delay:1.0f]; 

    //Create an action with the animation that can then be assigned to a sprite 
    CCActionAnimate *animationAction = [CCActionAnimate actionWithAnimation:animation]; 

    CCActionRepeatForever *repeatingAnimation = [CCActionRepeatForever actionWithAction:animationAction]; 
    [_drone runAction:repeatingAnimation]; 

    //----------------------------------------------------------- 

那是我的代碼的相關部分,我得到這個錯誤:

*終止應用程序由於未捕獲的異常 'NSInvalidArgumentException',原因是:「* - [__ NSArrayM insertObject:atIndex:]:object can not be nil'

回答

0

您不在數組中添加幀:

for(int i = 1; i <= FRAMES; ++i) 
{ 
    CCSpriteFrame *spriteFrame = [[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName: [NSString stringWithFormat:@"animationFrame%d.png", i]]; // 
    [animationFrames addObject: spriteFrame]; 

} 
+0

檢查編輯請:) – BasedRebel

+0

兩個錯誤,一個錯誤的精靈幀,並沒有添加到數組。檢查你的spritesheet是否有正確的精靈名字 – Guru

+0

不知道爲什麼我錯過了,我修正了這個問題,併爲我的spritesheet名稱,它實際上被稱爲「DroneSpriteSheets.png」我在Xcode中檢查它,兩個幀是Drone1和Drone2.png。我在xcode中沒有錯誤,但在第二次編輯中,您可以看到我的完整動畫代碼以及所引發的錯誤。我不確定可能導致它的原因。 – BasedRebel