Идентичные SKActions выполняет медленнее, чем другие - PullRequest
0 голосов
/ 24 октября 2018

У меня есть сцена, которая выступает в качестве страницы меню для игры, и использую кнопку пользовательского интерфейса, чтобы активировать skaction, которая перемещает камеру на сцене, и меняю кнопки меню с помощью контейнера UIView.

Код просто перемещает камеру из крайнего левого в крайнее правое положение.На точно такой же скорости.И все же по какой-то причине движение вправо медленнее, чем влево?

func MoveCameraToRight () {

    let CameraWidth = StartingWidth * SceneCamera.xScale
    let MoveRight = SKAction.move(to: CGPoint(x: (scene?.frame.maxX)!-(CameraWidth/2), y: (camera?.position.y)!), duration: 1)
    camera?.run(MoveRight)

}

func MoveCameraToLeft () {

    let CameraWidth = StartingWidth * SceneCamera.xScale
    let MoveLeft = SKAction.move(to: CGPoint(x: (scene?.frame.minX)!-(CameraWidth/2), y: (camera?.position.y)!), duration: 1)
    camera?.run(MoveLeft)

}

Как видите, длительности абсолютно одинаковы.И все же по какой-то причине на iPhone XS Max оно выглядит значительно медленнее, чем действие «Влево»?

Вот код, который запускает эти действия:

@IBAction func Openlevels () {

    let Game = (self.view as! SKView).scene as! MainMenuScene
    Game.MoveCameraToRight()

    LevelsContainer.isHidden = false

}

func HideLevels () {

        let Game = (self.view as! SKView).scene as! MainMenuScene
        Game.MoveCameraToLeft()

        UIView.animate(withDuration: 0.25, animations: {
            self.LevelsContainer.alpha = 0

        }) { (complete: Bool) in
            self.LevelsContainer.isHidden = true
        }
    }

А затем на контейнеречтобы отклонить (и переместить камеру назад влево):

@IBAction func Home () {

    let Parent = self.parent as! MainMenu
    Parent.HideLevels()
    Parent.ShowMenu()

}

Оба SKActions для положения камеры установлены в 1, так почему один будет медленнее, чем другой?

1 Ответ

0 голосов
/ 16 ноября 2018

Решение было на самом деле очень простым:

let MoveLeft = SKAction.move(to: CGPoint(x: (scene?.frame.minX)!-(CameraWidth/2), y: (camera?.position.y)!), duration: 1)

Движение влево должно быть минимум + camWidth / 2, а не минус.Проблема заключалась в том, что он велел камере идти дальше, чем расстояние перемещения вправо.

let MoveRight = SKAction.move(to: CGPoint(x: (scene?.frame.maxX)!-(CameraWidth/2), y: (camera?.position.y)!), duration: 1)
...