Swift和Sprite套件没有正确接触

时间:2018-02-10 19:28:54

标签: ios swift sprite-kit

我正在制作一款带有Sprite Kit的游戏,用户可以使用通过屏幕的点击球。球每1秒产生一次。然而,如果产生了两个球并且用户轻击第一个球,那么第二个球(以及之后产生的任何球)将被移除/记录,而不是用户实际敲击的球。

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    for touch in touches {
        let location = touch.location(in: self)
        let node = self.nodes(at: location).first

        if node?.name == "BALL" {
            currentScore += ballValue
            player?.removeFromParent()
        }
        else {
            gameOver()
        }
    }

}

override func didMove(to view: SKView) {
    setupTracks()
    createHUD()

    self.run(SKAction.repeatForever(SKAction.sequence([SKAction.run {
        self.createBall(forTrack: self.track)
        }, SKAction.wait(forDuration: 2)])))

}

func createBall(forTrack track: Int) {

    setLevel()

    player?.name = "BALL"
    player?.size = CGSize(width: 100, height: 100)
    ballValue = 1

    let ballPosition = trackArray?[track].position

    player?.position = CGPoint(x: (ballPosition?.x)!, y: (ballPosition?.y)!)
    player?.position.y = (ballPosition?.y)!
    player?.zPosition = 1

    if ballDirection == "right" {
        player?.position.x = 0
        moveRight()
    }
    else {
        player?.position.x = (self.view?.frame.size.height)!
        moveLeft()
    }

}

1 个答案:

答案 0 :(得分:2)

我很确定这是因为你这样做:

player?.removeFromParent()

无论触摸哪个精灵,player始终是最后生成的精灵。您已经将已触及的节点分配给node,因此我认为您需要这样做:

node.removeFromParent()

代替。