Чтобы ответить на ваш первый вопрос, это аппаратная штука. Nexus 5, вероятно, имеет более высокое соотношение PPI (пикселей на дюйм), чем второе, хотя разрешение меньше.
Что касается вашего второго вопроса, я бы предложил альтернативу Gdx.graphics.getDensity()
: Если вы пытаетесь убедиться, что ваш актив имеет тот же размер относительно экрана (т. Е. Ресурс 80x80 на дисплее 2560x1600 будет в два раза меньше на дисплее 1280x800), то я думаю, что вы хотите оставить свои активы того же размера, и измените размер вашей камеры вместо.
При создании игры в libGDX (или любой игровой движок), вы должны иметь в виду разницу между тремя наборами размеров/координаты в игре:
- Viewport это размер пространства на экране, где ваша игра будет рисоваться. Он измеряется в пикселях и по умолчанию соответствует размеру вашего окна (в полноэкранном режиме, размер экрана).
- игровой мир размер/координаты полностью произвольные. Они измеряются в любом устройстве, которое вы хотите (будь то метры, дюймы, бананы, F16 и т. Д.). Вы будете знать, что работаете в игровых мирах, потому что вы плаваете.
- фотоаппарат размер - это сумма «мир», которую вы можете видеть в свое время, измеренную в игровых устройствах. Вы можете сделать свою камеру 1280x800 частью мира или 3x5 частью мира или частью 137.6x42. Сложная вещь в том, что класс OrthographicCamera от libGDX по умолчанию имеет размер вашего видового экрана, действуя как будто 1 игровая единица == 1 пиксель.
Надеюсь, это имело смысл. Давайте посмотрим на последствия:
Скажем, у меня есть ресурс 800x600 GU (игровая единица) по 0,0 в моем игровом мире. Размер моего вида составляет 2560x1600, а моя камера также масштабируется до 2560x1600. Мой объект 800x600 GU будет отображать изображение 800x600 px на экране.
Теперь предположим, что я хочу портировать свою игру на другие размеры экрана с одинаковым соотношением (просто чтобы все было просто на данный момент). У меня все еще есть размер видового экрана 2560x1600, но я меняю камеру на 8x5 GU и мой игровой объект на 2.5x1.875 GU. Эти размеры будут установлены явно - независимо от размера окна просмотра. Это делает 1 GU = 320px. В результате мой игровой объект по-прежнему будет отображать на экране изображение 800x600 пикселей.
Теперь посмотрим, как это будет работать при разрешении 1280x800 пикселей: Мое окно просмотра - 1280x800 пикселей, но моя камера остается на 8x5 GU и мой игровой объект на 2.5x1.875 GU. Из-за размера камеры 1 GU = 160px, что означает, что мой игровой объект отображается на 400x300, что означает, что он имеет одинаковый размер на меньшем экране.
Надеюсь, это имело смысл без фотографий. Когда вы начинаете использовать экраны с разными пропорциями (то есть вы переходите с экрана 8x5 на экран 3x2), вам нужно немного дополнительной логики, чтобы соотношение сторон вашего видового экрана было таким же, как и ваша камера (в противном случае все становится растянутым). К счастью, libGDX предоставляет some viewports which will do this for you.
Здесь вы можете найти external tutorial сообщество libGDX, в котором говорится об этой проблеме.
На самом деле невероятно информативный! Я попытался использовать видовые экраны и камеры, так как они никогда не работали правильно. Позвольте мне задать глупый вопрос, моя игра - это игра, в которой нет движения экрана, поэтому камера всегда будет находиться в одном месте ... все, что мне действительно нужно, это на планшетах, которые увеличивают мои активы, скажем, x2 и на небольших экранах активы будут масштабироваться на x.75. Я просто хочу, чтобы изображения выглядели одинаково на больших экранах, они достаточно высокого качества, которые они масштабируют. Я просто не уверен, что лучший способ сделать что-то простое? Я продолжаю бить стену. – johnnyboy5566
Честно говоря, я бы по-прежнему использовал камеру, если вы считаете более одного разрешения. Хотя многие преимущества действительно вступают в игру, когда у вас есть движущиеся части (и что сказать, что вы не будете добавлять движения «эффекта» в будущем?), Это по-прежнему хорошая практика. Это немного сложнее в первый раз, когда вы это делаете, но на самом деле это не так сложно сделать. – John
Хорошо, спасибо! один последний глупый вопрос ... если у меня есть таблицы, в которых хранятся мои активы, такие как кнопки изображения, кнопки, флажки и т. д. Взяв образ для примера, как камера и видовое окно увеличивают размер таблиц? или, возможно, ссылку на то, как реализовать камеру и видовое окно, потому что, когда я это сделаю, я могу получить свой фон, я batch.draw (ing), но я не могу заставить окно просмотра и камеру увеличить все активы в таблицах и т. д.? – johnnyboy5566