2016-01-06 80 views
0

我試圖從默認的根場景轉換到帶有SpriteKit的新場景。但是,無論何時按下「開始」按鈕,它都會將舊場景灰化(儘管它仍然可見),並且繪圖板標籤顯示出來。現場仍然灰暗。舊場景中的所有按鈕仍然可以按下,但不執行相關操作。一個UIButton觸發此FUNC:場景過渡衰落但不切換場景

startButton.addTarget(self, action: "goToDrawingBoard:", forControlEvents: UIControlEvents.TouchUpInside) 

的FUNC:

@objc func goToDrawingBoard(sender: UIButton){ 
    let drawingBoardScene = DrawingBoardScene(size: self.size) 

    self.scene?.view?.presentScene(drawingBoardScene, transition: SKTransition.crossFadeWithDuration(1.0)) 
} 

而且DrawingBoardScene.swift文件:

import Foundation 
import SpriteKit 
import UIKit 

class DrawingBoardScene: SKScene { 

    let titleLabel = SKLabelNode(text: "DRAWING BOARD") 

    override func didMoveToView(view: SKView) {   
     /*LABEL: Displays title*/ 
     titleLabel.fontColor = UIColor.blackColor() 
     titleLabel.fontSize = 60 
     titleLabel.position = CGPoint(x: CGRectGetMidX(self.frame), y: CGRectGetMidY(self.frame)) 

     self.addChild(titleLabel) 
    } 
} 
+0

沒有足夠的信息來說肯定,但可選的鏈接看起來懷疑:在'self.scene?.view?.presentScene'中,如果'scene'或'view'爲零,'presentScene'不會是調用。在類中,「goToDrawingBoard」是否有意義鏈接?你測試了'self.scene'和'self.scene.view'的值嗎? – rickster

+0

goToDrawingBoard在MenuScene類 – Ulthran

+0

檢查我的第二個問題。此外,即使您尚未轉換,您看到該場景內容的原因是因爲您已將該場景添加爲當前場景的子場景。要麼做一個孩子,要麼做一個過渡,但不要兩個都做。 – rickster

回答

1

看起來你被錯誤地呈現場景,請嘗試以下操作:

@objc func goToDrawingBoard(sender: UIButton){ 
    let drawingBoardScene = DrawingBoardScene(size: self.size) 

    self.view?.presentScene(drawingBoardScene, transition: SKTransition.crossFadeWithDuration(1.0)) 
} 

沒有理由將新場景作爲孩子添加到舊場景中,誰知道你的場景爲什麼具有場景對象。

作爲一個個人筆記,在這個問題上呈現你的場景不是一個很好的呈現場景的方式。要呈現場景是觀看工作,所以你應該做的是當場景被移除的時候,以某種方式發送一個通知給場景完成工作並且正在等待它的視圖刪除,然後讓視圖呈現場景。這將允許視圖正確地移除舊的場景,而不需要任何固定器將其保持。一種方法做,這是丟給代表團

+0

你上面的代碼是我第一次嘗試的,它產生了我每次得到的相同結果。場景淡出並保持淡入淡出狀態,新場景重疊但不能替代舊場景。 – Ulthran

+0

你是什麼意思,並不代替 – Knight0fDragon

+0

你是說現場不死 – Knight0fDragon

0

我的朋友和我花了幾個晚上的各種解決方案,我們終於想出了一個工作是這樣的:

override func willMoveFromView(view: SKView) { 
     self.removeAllChildren() 
    delete(startButton) 
} 

override func delete(sender: AnyObject?) { 
    let subviews = (self.view?.subviews)! as [UIView] 
    for v in subviews { 
     if let button = v as? UIButton { 
      button.removeFromSuperview() 
     } 
    } 
} 

與此唯一的問題是,當場景轉變的按鈕可能需要一秒多的時間才能消失,給人一種g feel的感覺。它確實有效,所以對於短期解決方案來說它是很好的。