Почему эта функция перестает работать, как только я добавляю хитбоксы? - PullRequest
0 голосов
/ 14 февраля 2019

Я пытаюсь создать автомобильную игру, в которой вы перемещаете машину слева направо, касаясь экрана, но как только я задаю «определение физики -> тип кузова», и машина достигает крайнего левого или крайнего правогоэкрана, эта функция движения перестает работать.Я использую

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    for touch in touches{
        let touchLocation = touch.location(in: self)
        if touchLocation.x > centrePoint {
            if playerCar.position.x == playerCarAtMaxLeft {  
                playerCar.position.x = playerCarAtLeft

                playerCarMoveRight = true
                playerCarMoveLeft = false

            } else if playerCar.position.x == playerCarAtLeft {  
                playerCar.position.x = playerCarAtRight

                playerCarMoveRight = true
                playerCarMoveLeft = false

            } else if playerCar.position.x == playerCarAtRight {  
                playerCar.position.x = playerCarAtMaxRight

                playerCarMoveRight = true
                playerCarMoveLeft = false

            } else {
                playerCarMoveRight = false
                playerCarMoveLeft = true

            }
        } else {                                        
            if playerCar.position.x == playerCarAtMaxRight {     
                playerCar.position.x = playerCarAtRight

                playerCarMoveRight = false
                playerCarMoveLeft = true

            } else if playerCar.position.x == playerCarAtRight { 
                playerCar.position.x = playerCarAtLeft

                playerCarMoveRight = false
                playerCarMoveLeft = true

            } else if playerCar.position.x == playerCarAtLeft {   
                playerCar.position.x = playerCarAtMaxLeft

                playerCarMoveRight = false
                playerCarMoveLeft = true

            } else{
                playerCarMoveRight = true
                playerCarMoveLeft = false

            }
        }

        canMove = true

    }
}

playerCar - это плеер SKSpriteNodeCarAt ... это CGFloat playerCarMove ... это булево

1 Ответ

0 голосов
/ 14 февраля 2019

Я бы посоветовал вам просто позволить машине скользить по оси 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")
}

}

...