2016-01-06 3 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' - nil,' 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() 
     } 
    } 
} 

Единственная проблема состоит в том, что, когда сцена сдвигает кнопки, может занять секундную долю дольше, чтобы исчезнуть, придав ей своего рода глипчевое чувство. Это действительно работает, поэтому для краткосрочного решения это здорово.

Смежные вопросы