Как сделать applyImpulse равным на всех экранах - PullRequest
0 голосов
/ 02 мая 2018

Как вы, возможно, знаете, при использовании SpriteKit , applyImpulse работает не на всех экранах.

На iPhone SE мой мяч движется очень быстро, но на iPad Pro 2nd gen мяч идет очень медленно.

Есть ли способ, которым я могу сделать это равным на всех экранах, по сравнению с чем-то вроде ширины экрана?

Скажем, например, я хочу, чтобы мой мяч перемещался по экрану за 5 секунд на устройстве КАЖДЫЙ , какую формулу я бы использовал?

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

enter image description here

Примечание: Points per second рассчитывается как Half screen size, деленное на Time to move. График показывает, что pixels per second уменьшается с увеличением размера экрана.

Как я могу изменить свой applyImpulse для работы на всех экранах? (не включая его создание специально для каждого устройства, так как я хочу, чтобы это было устойчивым в будущем)

Если это возможно, пожалуйста, покажите небольшую функцию swift, или, если это невозможно, пожалуйста, дайте мне какие-либо предложения (ссылки на документы, форумы и т. Д.).

Я ценю любую помощь.

РЕДАКТИРОВАТЬ: My GameViewController.swift переопределить для загрузки сцены:

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()


    // Layout guides
    guide = UIApplication.shared.keyWindow?.safeAreaInsets


    if let view = self.view as! SKView? {

        // Load scene
        let scene = GameScene(size: view.frame.size)

        // Set the scale mode to scale to fit the window
        scene.scaleMode = .aspectFill

        // Set (0, 0) as the centre of the screen
        scene.anchorPoint = CGPoint(x: 0.5, y: 0.5)

        // Present the scene
        view.presentScene(scene)


        view.ignoresSiblingOrder = true
        view.showsFPS = true
        view.showsNodeCount = true
        view.showsPhysics = true

    }
}

1 Ответ

0 голосов
/ 04 мая 2018

Набор Sprite разработан так, что вам нужно создать свою игру только один раз.

Концепция «Экран» на самом деле не должна существовать, Ваша сцена - это ваш экран, а ваш экран - это то, как вы ее просматриваете.

Как мы уже обсуждали в чате, вы хотели, чтобы игровая зона была 7: 9, и вы хотели, чтобы сцена выровнялась по бокам от нее.

Для этого выберите размер сцены, который выше, чем широкий. Я бы порекомендовал использовать 375: 812, так как это iPhone X. @ 1x. Затем поместите в него узел размером 375: 482, так как это 7: 9.

Что произойдет на обычном устройстве 9:16, верхняя и нижняя области будут обрезаны, но все равно будет отображаться все игровое поле, поскольку устройство 9:16 имеет высоту 667.

Это означает, что 145 очков будут обрезаны вертикально от вашей основной игровой зоны.

Теперь мы сталкиваемся с проблемой iPad, где он толще устройства 9:16.

Наша видимая область сцены становится 375: 500, в которую наша игровая область едва вписывается.

У нас есть только 18 очков, чтобы работать с ним или нет.

Чтобы бороться с этим, нам нужно войти в раскадровку и изменить ограничения вида.

Нам нужно, чтобы вид не превышал определенного соотношения сторон.

Ограничивая размер, которому разрешено просматривать изображение, мы можем контролировать объем кадрирования на iPad. Затем мы можем добавить другое представление за SKView, чтобы контролировать любую графику, которую мы хотим, чтобы пользователь видел.

Теперь у нас есть настройка игры, в которой мы можем разместить весь контент игровой области внутри узла игровой области 375: 482.

Это измерение будет распространяться на все устройства, и аппаратное обеспечение будет выполнять масштабирование за вас, а значит, у вас будет меньше кода и меньше математики. Меньше кода и меньше математики означает меньше шансов для ошибок в вашей игре, плюс игра точно такая же, как геймплей, то есть пользователи iPad не получают преимущества перед пользователями iPhone, потому что вы дали им большую игровую площадку.

...