【问题标题】:Remove a function from SKScene when Touches Begin触摸开始时从 SKScene 中删除一个函数
【发布时间】:2018-01-10 02:56:51
【问题描述】:

我有一个蓝天纹理从屏幕顶部移动到底部,在一个函数中永远重复。但是,当触摸开始时,我希望蓝天在一段时间后完全淡出,然后完全从场景中移除。

我能够让天空暂时淡出,然后似乎循环的一半被移除,但我仍然每隔一段时间就会让天空下降。这是问题的视频:Blue Sky Video

在视频中,当屏幕左上角出现暂停按钮时,触摸开始 - 在触摸开始之前,蓝天按照应有的方式从上到下无缝移动。

功能

func createBlueSky() {
    let blueSkyTexture = SKTexture(imageNamed: "blueSky")

    for i in 0 ... 1 {
        let blueSky = SKSpriteNode(texture: blueSkyTexture)
        blueSky.name = "blueSky"
        blueSky.zPosition = -60
        blueSky.anchorPoint = CGPoint.zero
        blueSky.position = CGPoint(x: 0, y: (blueSkyTexture.size().height * CGFloat(i)))
        worldNode.addChild(blueSky)

        let moveDown = SKAction.moveBy(x: 0, y: -blueSkyTexture.size().height, duration: 10)
        let moveReset = SKAction.moveBy(x: 0, y: blueSkyTexture.size().height, duration: 0)
        let moveLoop = SKAction.sequence([moveDown, moveReset])
        let moveForever = SKAction.repeatForever(moveLoop)
        blueSky.run(moveForever)
        }

}

我已将上述函数添加到 didMove(toView)

覆盖函数 didMove

createBlueSky()

然后在我开始接触时,我添加了这段代码以淡出并从父级中删除。

我在另一篇文章中看到,要从另一个函数访问蓝天,我需要给它一个名字,我这样做了。还是没有运气:/

覆盖 func touchesBegan

let blueSky =  worldNode.childNode(withName: "blueSky") as! SKSpriteNode
    let blueSkyFade = SKAction.fadeOut(withDuration: 3)
    let blueSkyFadeWait = SKAction.wait(forDuration: 3)
    let removeBlueSky = SKAction.removeFromParent()
    blueSky.run(SKAction.sequence([blueSkyFadeWait, blueSkyFade, removeBlueSky]))

我对 Swift 很陌生,但我希望这个问题足够具体。我很乐意提供任何其他必要的信息。

【问题讨论】:

    标签: swift function loops sprite-kit touchesbegan


    【解决方案1】:

    您正在创建 2 个 blueSky 节点,但您只淡化并移除了其中的 1 个。您需要枚举所有具有您要查找的名称的节点。为此,请致电enumerateChildNodes(withName:}

    let blueSkyFade = SKAction.fadeOut(withDuration: 3)
    let blueSkyFadeWait = SKAction.wait(forDuration: 3)
    let removeBlueSky = SKAction.removeFromParent()
    enumerateChleNodes(withName:"blueSky")
    {
        (blueSky,stop) in 
        blueSky.run(SKAction.sequence([blueSkyFadeWait, blueSkyFade, removeBlueSky]))
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-11
      • 1970-01-01
      • 2011-09-11
      相关资源
      最近更新 更多