Я бы посоветовал вам просто позволить машине скользить по оси X столько, сколько она хочет, а затем использовать метод update
, чтобы отслеживать положение машин.
override func update(_ currentTime: TimeInterval) {
// Called before each frame is rendered
}
Таким образом, вы можете настроить let maxXPosition
, и как только автомобильный узел достигнет этой точки, вы остановите движение.
Способ сделать так, чтобы движение автомобильного узла было SKAction.moveTo
.
Простая версия:
class GameScene: SKScene {
var car : SKSpriteNode! // Your car sprite
var maxXPosition : CGFloat! // The max point on the x-axis the car is allowed to move to
override func didMove(to view: SKView) {
// Initiate car
car = self.childNode(withName: "//car") as? SKSpriteNode
// Setup the max x position
maxXPosition = 200
}
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
for touch in touches {
let location = touch.location(in: self)
moveCar(toPosition: location)
}
}
override func update(_ currentTime: TimeInterval) {
// Check the cars position
if car.position.x >= 200 {
// Stop the car is the point has been reached
car.removeAction(forKey: "carDrive")
}
}
func moveCar(toPosition position: CGPoint) {
let moveCarToXPoint = SKAction.moveTo(x: position.x, duration: 1)
car.run(moveCarToXPoint, withKey: "carDrive")
}
}