无限移动的SKNodes未能按预期工作

时间:2019-07-27 08:10:13

标签: swift xcode10 game-development

我是Swift和Xcode的新手,正在尝试通过基本的游戏开发来学习。我目前有一个在启动时打开的主菜单,从中可以启动实际的游戏玩法。游戏按预期工作,但是当我进入主菜单然后又回到游戏中时,它的工作方式有所不同。

我尝试更改运动函数的定义方式,在其中运行代码的不同部分。我花了很长时间试图弄清楚这一点,并且由于缺乏对编程语言的了解,我相信我只是缺少了一些东西。

正在播放三个功能:

移动功能创建所有正确的SKAction来移动块。

func movement(){

    touchScreen = false
    let spawn = SKAction.run(({
        () in
        self.createBox()
    }))

    let distance = CGFloat(500)
    let time = TimeInterval(0.005 * distance)
    let delay = SKAction.wait(forDuration: (time+0.1))
    let spawnDelay = SKAction.sequence([spawn, delay])
    let spawnDelayForever = SKAction.repeatForever(spawnDelay)
    self.run(spawnDelayForever)

    let moveLeft = SKAction.moveBy(x: -distance - 100, y: 0, duration: time)
    let remove = SKAction.removeFromParent()
    moveRemove = SKAction.sequence([moveLeft, remove])

}

createBox函数仅创建具有所有相应属性的框。

func createBox(){

    boxNode = SKNode()
    boxNode.name = "boxNode"

    box.color = SKColor.white
    box.size = CGSize(width: 100, height: 100)
    //Correct y value: 90
    box.position = CGPoint(x: self.frame.width - 100, y: 400)
    box.name = "box"
    box.physicsBody = SKPhysicsBody(rectangleOf: box.size)
    box.physicsBody?.affectedByGravity = false
    box.physicsBody?.isDynamic = false
    box.physicsBody?.categoryBitMask = PhysicsCatagory.box
    box.physicsBody?.collisionBitMask = PhysicsCatagory.char
    box.physicsBody?.contactTestBitMask  = PhysicsCatagory.char
    boxNode.addChild(box)
    box.run(moveRemove)
    self.addChild(boxNode)

}

还有touchesBegan函数,这是我运行代码的地方。

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {

if gamestarted && touchScreen{

        movement()

    }

    if gamestarted{
        for touch in touches{
            let location = touch.location(in: self)
            if backtommBut.contains(location){
                self.childNode(withName: "boxNode")?.removeFromParent()
                enumerateChildNodes(withName: "boxNode", using: ({
                    (node, error) in
                    node.speed = 0
                    self.removeAllActions()
                }))
                createMainMenu()
            }
        }
    }

预期结果是“框”从屏幕的右侧移至左侧。第一次工作正常。返回主菜单并再次点击播放按钮后,该框将显示在屏幕中间,并且不会创建新的框。任何建议或帮助将不胜感激。

0 个答案:

没有答案