【问题标题】:Swift Sprite Kit passing BoolSwift Sprite Kit 传递 Bool
【发布时间】:2015-03-17 19:57:35
【问题描述】:

我得到了一张有 2 张脸的图像,向上和向下(想象一张卡片)。 每当您点击图像时,它都会更改图像。

我使用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)

}

【问题讨论】:

    标签: ios swift sprite-kit


    【解决方案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.
    
    }
    

    还在Restart function 的新场景中设置旧的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?.scaleMode = SKSceneScaleMode.AspectFill
    
        Scene.FaceUp = FaceUp //changed line.  
    
        self.scene?.view?.presentScene(Scene, transition: Transition)
    
    }
    

    【讨论】:

    • 我用你的方法改变了图像纹理,但是在新场景出现后,它在setCardState函数中给了我fatal error: unexpectedly found nil while unwrapping an Optional value
    • 你能展示你的新代码吗?你在哪里得到错误?
    • 你在哪里加载纹理?
    • 非常感谢您抽出宝贵时间!错误现在消失了,但在场景重新启动后,显示了错误的图像(它再次是 FaceUp = true,虽然它应该是 FaceUp = false)。
    • 我只是误解了你的意思。我认为应该将其更改为 setCardState 而不是 Flip,但您的意思是我应该将其添加为新函数。现在它起作用了!非常感谢,抱歉拖了这么久!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多