2015-03-16 5 views
0

У меня есть изображение с двумя лицами, вверх и вниз (представьте карту). Всякий раз, когда вы нажимаете изображение, оно меняет изображение.Swift Sprite Kit, проходящий Bool

Я использовал Bool, чтобы получить выражение. Однако, после того, как Сцена представлена ​​снова, я хочу показать изображение, которое было вверх/вниз в последней сцене. Обратите внимание, что это всего лишь 1 сцена, и она появляется снова.

Как передать значение Bool между Сценами?

// Обновление:

Мой код:

.... 
var FaceUp = true 
.... 

override func didMoveToView(view: SKView) { 

TTexture = SKTexture(imageNamed: "TCard.png") 
TTexture.filteringMode = .Nearest 
T2Texture = SKTexture(imageNamed: "T2Card.png") 
T2Texture.filteringMode = .Nearest 

Card = SKSpriteNode(texture: TTexture) 
Card.position = CGPoint(x: Rate.position.x - (TransparentLayer.size.width/3), y: Rate.position.y) 
Card.size = CGSize(width: 50, height: 50) 
Card.name = "Card" 
Card.zPosition = 100 
self.addChild(Card) 

flip(FaceUp) 

} 

func flip(state : Bool) { 
    FaceUp = state 
    if (!state) { 
     Card.texture = TTexture //Error 
     Player.texture = T1 
     Player.runAction(RunAnimation1) 
     FaceUp = true 
    } else { 
     Card.texture = T2Texture //Error 
     Player.texture = T2 
     Player.runAction(RunAnimation2) 
     FaceUp = false 
    } 
} 

override func touchesBegan(touches: NSSet, withEvent event: UIEvent) { 

    let touch:UITouch = touches.anyObject() as UITouch 
    let touchLocation = touch.locationInNode(self) 

    let Node:SKNode = self.nodeAtPoint(touchLocation) 

    if Node.name == "Card" { 

     let Scale1 = SKAction.scaleTo(0.7, duration: 0.1) 
     let Scale2 = SKAction.scaleTo(1, duration: 0.1) 
     let Scaling = SKAction.sequence([Scale1, Scale2]) 
     Card.runAction(Scaling) 

     self.flip(FaceUp) 

} 
} 

func Restart(){ 

    self.saveHighScore() 

    LastScore = Score 
    self.addLeaderboardScore(self.Score) 
    let Transition = SKTransition.fadeWithDuration(1.8) 
    let Scene = GameScene(size: self.frame.size) 
    Scene.LastScore = Score 
    Scene.FaceUp = FaceUp 
    scene?.scaleMode = SKSceneScaleMode.AspectFill 

    self.scene?.view?.presentScene(Scene, transition: Transition) 

} 

ответ

1

Вы можете определить функцию в GameScene как в следующем.

func setCardState(state : Bool) { 
    FaceUp = state 
    if (!state) { 
     Card.texture = Texture2 
     Player.texture = T2 
    } else { 
     Card.texture = Texture1 
     Player.texture = T1 
    } 
} 

И вызвать его из didMoveToView в новой сцене.

override func didMoveToView(view: SKView) { 

    TTexture = SKTexture(imageNamed: "TCard.png") 
    TTexture.filteringMode = .Nearest 
    T2Texture = SKTexture(imageNamed: "T2Card.png") 
    T2Texture.filteringMode = .Nearest 

    Card = SKSpriteNode(texture: TTexture) 
    Card.position = CGPoint(x: Rate.position.x - (TransparentLayer.size.width/3), y: Rate.position.y) 
    Card.size = CGSize(width: 50, height: 50) 
    Card.name = "Card" 
    Card.zPosition = 100 
    self.addChild(Card) 

    setCardState(FaceUp) // added line. 

} 

Также установите старый FaceUp значение в новой сцене в Restart function.

func Restart(){ 

    self.saveHighScore() 

    LastScore = Score 
    self.addLeaderboardScore(self.Score) 
    let Transition = SKTransition.fadeWithDuration(1.8) 
    let Scene = GameScene(size: self.frame.size) 
    Scene.LastScore = Score 
    scene?.scaleMode = SKSceneScaleMode.AspectFill 

    Scene.FaceUp = FaceUp //changed line. 

    self.scene?.view?.presentScene(Scene, transition: Transition) 

} 
+0

Я получил это работает с изменением текстуры изображения с вашим методом, однако после того, как новая сцена должна быть представлена, она дает мне 'фатальную ошибку: неожиданно нашла ноль в то время как разворачивание Факультативного value' в' setCardState' функции – Albert

+0

Вы можете показать свой новый код? где вы получаете ошибку? – rakeshbs

+0

Обновление моего сообщения, я объявил ошибку. – Albert

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