2016-08-25 4 views
-1

Вот что я имею в виду. На небольшом окне:Получение размера окна игроков, изменение позиции в соответствии с размером?

On a small window

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

in fullscreen

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

+0

Также, если это не подходящее место, чтобы задать этот вопрос, извините, я смущен – fnTASY

+0

Какой код вы используете для установки позиции игрока? – chris

+1

@chris Ну, если я объясню правильно, но вот код, это учебник, поскольку я новичок в love2. Github из учебника: https://github.com/charles-l/gamedev_tutorial/blob/cd76f87db40fa3a802ccdf283c39745d1de1d19e/invaders.love/main.lua – fnTASY

ответ

0

Таким образом, в вашем коде, позиция у игрока устанавливаются в фиксированном размер:

player.y = 550 

Это будет 550px от верхней границы экрана.

На скриншоте «Полноэкранный режим» у вас просто больше пикселей, с которыми вы работаете. 550px по-прежнему совпадает с верхней частью окна, но теперь над ним находится дополнительное пространство.

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

How would I make it so it's always near the bottom?

Вы можете проверить высоту окна, чтобы установить проигрыватель на определенное количество пикселей выше нижней экрана, таких как:

player.y = love.window.getHeight() - 100 

https://love2d.org/wiki/love.window

How would this work with other screen sizes?

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

Например, вы можете разрешить игроку использовать их настройку с 3 мониторами для просмотра большего количества игрового мира. Или, возможно, вы захотите сохранить все ваши координаты «fixed» и scale графикой в ​​соответствии с размером окна.

+0

Спасибо, я попробовал player.y = love.window.getHeight() - 100, но я получаю ошибка: попытка вызвать поле «getHeight» – fnTASY

+0

Я бы предположил, что вы используете любовную версию 0.10.0+? Существует [patch note] (https://love2d.org/wiki/0.10.0), в котором говорится, что этот API был изменен. Попробуйте использовать 'love.graphics.getHeight()' (документально [здесь] (https://love2d.org/wiki/love.graphics.getHeight)) вместо 'love.window.getHeight()'. – chris

+0

Спасибо, я пробовал это, и это работает, но при меньшем размере окна он просто не появляется? – fnTASY

0

Как и в случае с крисом, в зависимости от размера экрана количество отображаемых пикселей меняется. Поэтому используйте 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, вы можете также рассмотреть love.window.getPixelScale!

Смежные вопросы