2014-03-02 25 views
4

不工作的過渡我正在調用使用這樣的轉換下一個場景:在SpriteKit

SKTransition *transition = [SKTransition revealWithDirection:SKTransitionDirectionDown duration:0.5]; 

    SKView *skView = (SKView *)self.view; 

    SKScene * scene = [[GameOverScene alloc] initWithSize:self.size]; 
    scene.scaleMode = SKSceneScaleModeAspectFill; 
    [skView presentScene:scene transition:transition]; 

了組成GameOverScene(按鈕,圖像等)的元件在它的init方法被添加。

問題是沒有看到轉換。一個場景立即切換到另一個場景。

我想這個過渡發生在下一個場景有機會構建它的元素之前。 我試圖將下一個場景的創建移動到didMoveToView而沒有成功。

出於測試目的,我試圖推遲presentScene時間線甚至大於2秒。當我這樣做時,我幾乎看不到轉換的結束幀。

我該怎麼做?建立下一個場景並進行有效轉換的正確方法是什麼?

回答

0

我在我的應用程序中編寫了完全相同的代碼,以便在場景中顯示遊戲,但有一點不同。我的代碼如下:

- (void)showGameOverScene 
{ 
    SKTransition* reveal = [SKTransition doorsCloseVerticalWithDuration:0.5]; 

    SKScene* gameOverScene = [[RSGameOverScene alloc] initWithSize:self.size]; 

    [self.view presentScene:gameOverScene transition: reveal]; 
} 

它一直像一個魅力。唯一的區別是,我不是要求:

scene.scaleMode = SKSceneScaleModeAspectFill; 

在我RSGameOverScene-(id)initWithSize:(CGSize)size設置節點,再沒有任何問題。一切正常。

我看不到這條線可能成爲問題的原因,但您可能想嘗試對其進行評論以查看是否有幫助。但是,您的代碼看起來很好,所以問題的根源可能在其他地方。

+0

不適合我。我認爲問題在於傳入的場景需要加載所有元素(至少10個按鈕+背景)。這似乎是一個精靈錯誤。 – SpaceDog

+0

這仍然沒有解決嗎?我還沒有弄清楚,現在我的遊戲已經有這個問題好幾個月了。 – lespommes

3

如果新場景特別佔用資源,即需要大量紋理加載,則會延遲任何幀渲染。如果紋理加載花費的時間超過了你的轉換時間,你將會錯過所有這些,因爲在轉換完成之後,第一幀將被顯示。 我也遇到過這種情況,雖然我能更好地確定根本原因,因爲我有2秒的過渡,其中只顯示最後0.5秒。

如何解決這個問題?預加載您的紋理。見Apple Docs

+ (void)preloadTextures:(NSArray *)textures withCompletionHandler:(void (^)(void))completionHandler 

我要強調的SKSpriteSKTexture和你 「image.png」 之間的區別。 SKSprite根據其texture屬性(或background顏色)和size自行繪製。你可以爲許多精靈使用一個SKTexture。反過來,圖像文件(「image.png」)可以提供多個SKTexture對象。

重要提示:您希望使用傳遞給上述方法的SKTexture對象數組中的紋理實際上從紋理加載中受益。這需要某種形式的紋理管理。

如果您的問題確實與紋理有關,請告知我是否需要我擴展紋理管理。相關文章(可能有點幹)可以在這裏找到:SO sktexture-preloading