我正在制作一款带有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()
}
}
答案 0 :(得分:2)
我很确定这是因为你这样做:
player?.removeFromParent()
无论触摸哪个精灵,player
始终是最后生成的精灵。您已经将已触及的节点分配给node
,因此我认为您需要这样做:
node.removeFromParent()
代替。