在我正在開發的項目中,我有多個角色可以玩(在這種情況下,我會將它們稱爲無人機)。在我的遊戲中,我通過_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'
檢查編輯請:) – BasedRebel
兩個錯誤,一個錯誤的精靈幀,並沒有添加到數組。檢查你的spritesheet是否有正確的精靈名字 – Guru
不知道爲什麼我錯過了,我修正了這個問題,併爲我的spritesheet名稱,它實際上被稱爲「DroneSpriteSheets.png」我在Xcode中檢查它,兩個幀是Drone1和Drone2.png。我在xcode中沒有錯誤,但在第二次編輯中,您可以看到我的完整動畫代碼以及所引發的錯誤。我不確定可能導致它的原因。 – BasedRebel