Как получить размер окна игроков, изменить положение в зависимости от размера?
Вот что я имею в виду. На маленьком окне:
Космический корабль, так же как и у игрока, идеально расположен вблизи дна. Но если я выхожу в полноэкранный режим:
Позиция игрока находится посередине. Как бы я сделал так, чтобы он всегда был рядом с дном? Как это будет работать с другими размерами экрана?
2 ответа
Как уже говорила Крис, количество отображаемых пикселей зависит от размера экрана. Так что используйте https://love2d.org/wiki/love.graphics.getHeight, чтобы получить фактическую высоту экрана в пикселях.
Затем вы хотите убедиться, что ваш объект всегда остается на одном и том же месте, независимо от размера вашего экрана. Этого можно добиться, если вычесть несколько пикселей из фактической высоты экрана (известной из getHeight()
). Что-то вроде этого:
screenHeight = love.graphics.getHeight()
objectPositionY = screenHeight - 100
objectHeight = 10
Но, как вы только что упомянули в одном из комментариев выше, при "меньших" размерах окна объект вообще не будет отображаться. Это происходит, если screenHeight
меньше, чем вычитаемые 100 пикселей, в этом случае, конечно, объект отображается над / за пределами видимого экрана. Но если вы действительно хотите создать игру, используя такие маленькие окна, вы можете попробовать что-то вроде этого:
screenHeight = love.graphics.getHeight()
objectPositionY = screenHeight * 0.9
objectHeight = screenHeight * 0.05
Таким образом, объект всегда говорит в одном и том же месте в зависимости от screenHeight, где 0
это верх и 1
это нижняя часть экрана. О, и, конечно, вы можете сделать то же самое для screenWidth
также.
Но в целом, возможно, вам следует ограничить минимальный размер чем-то полезным.
И для полноты картины, если вы хотите создать игру для нескольких платформ (особенно для Android) с использованием highDPI, вы можете рассмотреть и https://love2d.org/wiki/love.window.getPixelScale!
Итак, в вашем коде позиция игрока установлена на фиксированную величину:
player.y = 550
Это будет 550px от верхней границы экрана.
На "полноэкранном" скриншоте у вас просто больше пикселей, с которыми вы работаете. 550px - это то же самое количество относительно верхней части окна, но теперь под ним есть дополнительное пространство.
Если вы планируете разрабатывать свою игру для масштабирования экрана с различными размерами экрана, вам нужно решить, как вы хотите управлять масштабом.
Как бы я сделал так, чтобы он всегда был рядом с дном?
Вы можете проверить высоту окна, чтобы зафиксировать проигрыватель на определенном количестве пикселей над нижней частью экрана, например:
player.y = love.window.getHeight( ) - 100
https://love2d.org/wiki/love.window
Как это будет работать с другими размерами экрана?
Вы собираетесь получить больше или меньше места в зависимости от доступного количества пикселей в вашем окне. У вас есть несколько вариантов размещения активов, и тот, который вы выберете, будет зависеть от вашего собственного желаемого результата при изменении размера окна.
Например, вы можете разрешить игроку использовать свои 3 монитора для просмотра большей части игрового мира. Или вы можете оставить все свои координаты "фиксированными" и масштабировать графику в соответствии с размером окна.