Как получить размер окна игроков, изменить положение в зависимости от размера?

Вот что я имею в виду. На маленьком окне:

На маленьком окне

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

на весь экран

Позиция игрока находится посередине. Как бы я сделал так, чтобы он всегда был рядом с дном? Как это будет работать с другими размерами экрана?

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 монитора для просмотра большей части игрового мира. Или вы можете оставить все свои координаты "фиксированными" и масштабировать графику в соответствии с размером окна.

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