Я сталкиваюсь с проблемой, когда, когда я поворачиваю вид, он сбрасывает положение указанного вида

Я пытаюсь закодировать игру астероидов, используя swift. Вот пример игры. http://www.freeasteroids.org/

Я пишу код для игры в телефонную игру, поэтому вместо клавиатуры / мыши игрок будет управлять кораблем игрока, используя кнопку поворота против часовой стрелки, кнопку поворота по часовой стрелке, кнопку стрельбы и кнопку толчка.

Есть вид playerShip, который предназначен для представления корабля игрока.

У меня проблемы с тем, чтобы кнопки тяги и кнопки поворота работали вместе. Я могу сделать playerShip смотреть движение, когда я нажимаю кнопку тяги, однако всякий раз, когда я поворачиваю playerShipего положение сбрасывается, и он не может двигаться (хотя он все еще может вращаться).

Я пробовал несколько разных подходов в рамках thrustButtonPressed Метод наряду с некоторыми в обоих rotateButtonPressed методы, но это все еще не работает.

Может кто-нибудь помочь объяснить, что я делаю не так?

Этот метод вызывается из класса контроллера игрового представления, который использует GameScreenView класс как его точка зрения. В пределах GameScreenView В этом окне имеются кнопки для действия съемки, действия тяги, действия вращения по часовой стрелке и действия вращения против часовой стрелки.

Обратитесь к thrustButtonPressed метод. Все @objc методы вызываются изнутри viewDidLoad метод жизненного цикла...

 @objc func thrustButtonPressed(){
        backButtonSource?.getTransformAngleCClockWise()
        let floaty = (backButtonSource?.getTransformAngleClockWise())!
        let pBounds = initView.playerShip.frame
        let newBounds = CGRect(x: pBounds.minX + cos(floaty) * 100.0, y: pBounds.minY - sin(floaty) * 100.0 , width: pBounds.width, height: pBounds.height)

        //two alternate solutions that are both able to move change the 
        //position of the view effectively. I run into the same issue with 
        //both of them though.

        //approach 1
        initView.playerShip.frame = newBounds''

        //approach 2
        initView.playerShip.frame.origin.x = initView.playerShip.frame.origin.x + cos(floaty + .pi / 6) * 100.0
        initView.playerShip.frame.origin.y = initView.playerShip.frame.origin.y - sin(floaty + .pi / 6) * 100.0

        //alternate approach that isnt working
        //initView.playerShip.transform = initView.transform.translatedBy(x: cos(floaty + .pi / 6) * 100.0, y:  cos(floaty + .pi / 6) * 100.0)

    }

другой код.


override func viewDidLoad() {
        self.view = GameScreenView()
        initView.backButton.addTarget(self, action: #selector(goBack), for: .touchUpInside)

        initView.rotateCClock.addTarget(self, action: #selector(rotateCClockwise), for: .touchUpInside)
        initView.rotateClock.addTarget(self, action: #selector(rotateClockwise), for: .touchUpInside)
        initView.thrustButton.addTarget(self, action: #selector(thrustButtonPressed), for: .touchUpInside)
        initView.shootButton.addTarget(self, action: #selector(shootButtonPressed), for: .touchUpInside)

    }

    @objc func rotateCClockwise(){
        //in a game state class i'm storing a float that'll get incremented when this is called.
        //floaty represents that.
        let floaty = (backButtonSource?.getTransformAngleCClockWise())!
        initView.playerShip.transform = CGAffineTransform(rotationAngle: floaty)

    }

    @objc func rotateClockwise(){
        //in a game state class i'm storing a float that'll get incremented when this is called.
        //floaty represents that.
        let floaty = (backButtonSource?.getTransformAngleClockWise())!
        initView.playerShip.transform = CGAffineTransform(rotationAngle: floaty)
    }

    var initView: GameScreenView{
        return view as! GameScreenView
    }

Я ожидаю поведения, чтобы при вызове методов поворота это действие не сбрасывало положение playerShip вид и что он будет вращать корабль в его текущем положении. Вместо этого вызов одного из методов поворота сбрасывает положение корабля игрока.

0 ответов

Другие вопросы по тегам