2016-03-08 37 views
0

**編輯 我做了一些調試,並將名稱「企鵝」更改爲不存在的圖像文件,奇怪的是,有時當我編譯我會得到帶有x的方形圖標,這意味着具有該名稱的文件未找到,但其他時間,此錯誤框甚至不會顯示。奇怪的是,即使這個錯誤框沒有顯示出來(意味着程序沒有嘗試定位圖像文件),命中檢測仍然存在,並且「隱形」企鵝仍然可能死亡 **更新到Xcode 7.2.1後不加載圖像

I最近從6.4版更新了我的Xcode。?到7.2.1。一旦這樣做,我的一些圖像將不再加載。奇怪的是,圖像(在模擬器上編譯遊戲時)偶爾會加載,偶爾也不會顯示。另外,我的SpriteKit粒子發射器也沒有加載。

我的圖像全部位於支持文件夾內,並標記爲「[email protected]」。此外,圖像全部以編程方式實例化/插入到遊戲中。

Esentially我創建一個SKSpriteNode稱爲英雄像這樣:

-(IBAction)startGame:(id)sender{ 
hero.alpha = 1; 
..... 
} 

我:

characterName = @"penguin"; 
hero = [SKSpriteNode spriteNodeWithImageNamed:characterName]; 
hero.position = CGPointMake(self.frame.size.width*0.5, self.frame.size.height*0.5); 
hero.physicsBody = [SKPhysicsBody bodyWithTexture:hero.texture size:hero.texture.size]; 
hero.physicsBody.dynamic=YES; 
hero.physicsBody.friction=NO; 
hero.physicsBody.allowsRotation=NO; 
hero.physicsBody.categoryBitMask = heroCategory; 
hero.physicsBody.contactTestBitMask = enemyCategory; 
hero.physicsBody.collisionBitMask = 0; 
hero.physicsBody.usesPreciseCollisionDetection = YES; 
hero.alpha = 0; 
[mainLayer addChild:hero]; 

然後使英雄visable,後來我在遊戲開始時改變SKSpriteNode的alpha以類似的方式製作我的許多其他圖像。

一個會發生什麼的例子是,我第一次編譯遊戲時,企鵝映像可能會正確加載,然後我將停止構建並重新編譯它,而企鵝將不再顯示這一次,然後如果我停下來,並重建它,企鵝可能是可見再次,等等....

這我如何實現我的粒子發射器:

-(void)addFeathers: (CGPoint) position{ 
if (soundEnabled==TRUE) { 
     [poofSound play]; 
} 


NSString *explosionPath2 = [[NSBundle mainBundle] pathForResource:@"FeatherAnimation1" ofType:@"sks"]; 
SKEmitterNode *explosion2 = [NSKeyedUnarchiver unarchiveObjectWithFile:explosionPath2]; 
explosion2.position = position; 
[mainLayer addChild:explosion2]; 

SKAction *removeExposion2 = [SKAction sequence:@[[SKAction waitForDuration:10],[SKAction removeFromParent]]]; 
[explosion2 runAction:removeExposion2]; 

} 

然後在後面的程序:

if([characterName isEqualToString:@"penguin"]){ 
     [self addFeathers:deadPos]; 
    } 

該項目可以在下面的鏈接中找到:https://github.com/cyrusbehr/Dodge.git

我理解這個應用程序是用不好的編程習慣做,但它只是我的第一個。我真的想解決這些問題,所以我可以把遊戲放回到appstore!

任何幫助,非常感謝。

回答

0

您是否嘗試將圖像放入資產目錄?

+0

我試着把我所有的圖片放在我的Images.xcassets文件夾中,但是這似乎沒有解決問題。除了將圖像拖入Images.xcassets文件夾以外,是否需要執行任何形式的配置(或更改任何代碼)? – AppD3veloper

+0

你沒有。如果您在資產目錄「Player」中調用圖像,而不是像SKSpriteNode(imageNamed:「Player」)那樣調用它,它會自動獲取正確的圖像(@ 2x,@ 3x)圖像。 Apple建議使用資產目錄以獲得最佳性能和組織。 – crashoverride777

+0

關於你的問題,很難通過查看代碼來判斷。你知道哪條線可能導致問題? – crashoverride777

0

嘗試將圖像放入資產目錄; 這是因爲該方法:

+ (instancetype)spriteNodeWithImageNamed:(NSString *)name; 

名稱是存儲在應用程序包中的圖像文件的名稱。

添加「.png」即可。

+0

好的,我會試試看,只是爲了確認,我應該在哪裏添加後綴.png? – AppD3veloper

+0

'[SKSpriteNode spriteNodeWithImageNamed:@「[email protected]」];' 並且只考慮添加@ 3x圖片 – ibirdbluer

+0

我做了您所建議的更改,但我似乎仍然遇到圖像僅有時會加載 – AppD3veloper

0

原來,在XCode更新後,我的背景圖片阻止了我的其他節點。我通過改變背景的z位置解決了這個問題。

SKSpriteNode *background = [SKSpriteNode spriteNodeWithImageNamed:@"sampleBackground"]; 
background.zPosition = -1.0;