Различные разрешения экрана / пропорции (игры) - PullRequest
44 голосов
/ 15 августа 2011

РЕДАКТИРОВАТЬ: Спасибо за все ваши ответы и комментарии.Подумав об этом, я перефразирую суть вопроса: «Как определить и ограничить минимальное разрешение / отношение, на которое может работать моя игра».Поскольку imo либо игра становится непригодной для игры на самом маленьком экране / соотношении (отсутствие детализации), либо поддержка даже самого маленького экрана / соотношения значительно ухудшает впечатления для всех остальных.Кроме того, мы даже не знаем, что такое наименьшее разрешение, или можем ограничить его каким-либо образом, кроме отключения ldpi ... что все еще не говорит нам о наименьшем mdpi.В конце концов, я не думаю о том, как создать хороший результат, а о том, как создать идеальный результат;).Думаю, это невозможно (пока?).

Примечание: Это касается исключительно телефонов, а не планшетов. Этот вопрос не так важен для приложений, как для игр, которые не используютСистема разметки Android.

Я всегда находил определения, какие разрешения ожидать, несколько расплывчато.Мне известно о списке в документах.

Теперь мой первый вопрос заключается в том, является ли этот список полным или, другими словами, разрешено ли изготовителю использовать другие разрешения или соотношения сторон.Мой текущий подход заключается в том, чтобы рассматривать этот список с точки зрения соотношения сторон, которое выглядит примерно так (не уверен, что это точно, но вы поняли идею):

  • ldpi: наименьшее соотношение сторон 4: 3
  • mdpi: наименьшее соотношение сторон 3: 2
  • hdpi: наибольшее соотношение сторон 16: 9

4:3 3:2 16:9

Поэтому, если я хочу охватить целый ряд устройств, я выясняю, каковы мои самые маленькие и самые большие соотношения сторон, и проектирую макет для самых маленьких, одновременно делая его автоматически увеличивающимся до самого большого.Например, если я хочу поддерживать все плотности, я проектирую экраны для 4: 3 и увеличиваю их до 16: 9.В случае, если я уберу поддержку ldpi, я бы разработал для 3: 2.Конечно, это предполагает, что никогда не будет устройства mdpi с соотношением сторон 4: 3, что возвращает нас к моему первому вопросу.

Моим предпочтительным решением было бы указать на Android Market, какие пропорции моего приложенияможет справиться, но это пока не представляется возможным.

У кого-нибудь есть лучший подход?(Помните, что это только для игр на телефонах)

Ответы [ 6 ]

19 голосов
/ 19 августа 2011

Я не могу прямо ответить на ваш вопрос, но я хотел бы рассказать вам о моем подходе.Я стараюсь не использовать какие-либо цифры вообще.Вместо этого я стараюсь использовать отступы, поля и относительные макеты, чтобы мои представления выглядели правильно на любом телефоне.Это также помогает мне избежать создания вида для разных ориентаций.

4 голосов
/ 24 августа 2011

Я нашел четкий ответ на проблему.

Минимальные разрешения не определены до 3.0.Таким образом, для версии 3.0 и выше можно будет выбрать минимальное разрешение, разработать игру на его основе и динамически увеличивать макет на больших экранах / соотношениях, как было упомянуто superM и другими.

По мере разработкиВаш пользовательский интерфейс для разных размеров экрана, вы обнаружите, что каждый дизайн требует минимального пространства.Таким образом, каждый обобщенный размер экрана выше имеет соответствующее минимальное разрешение, которое определяется системой.Эти минимальные размеры указаны в единицах «dp» - тех же единицах, которые следует использовать при определении макетов, - что позволяет системе избежать беспокойства об изменениях в плотности экрана.

  • x Большие экраны не менее 960dp x720dp
  • большие экраны не менее 640dp x 480dp
  • нормальные экраны не менее 470dp x 320dp
  • маленькие экраны не менее 426dp x 320dp

Примечание: Эти минимальные размеры экрана были не так хорошо определены до Android 3.0 , поэтому вы можете столкнуться с некоторыми устройствами, которые неправильно классифицированы между обычным и большим.Они также основаны на физическом разрешении экрана, поэтому могут различаться для разных устройств - например, планшет 1024x720 с системной панелью на самом деле имеет немного меньше доступного пространства для приложения из-за его использования системной панелью.

Источник

4 голосов
/ 21 августа 2011

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

Честно говоря, и я надеюсь, что я не единственный, но в полной мере использующий DIP (независимые от устройств пиксели) и относительное размещение и так далее ... уменьшил мои файлы макета активности до 1 за действие вместо 3 различных вида для HDPI, MDPI и LDPI.

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

Display display = getWindowManager().getDefaultDisplay(); int displayWidth = display.getWidth(); int displayHeight = display.getHeight();

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

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

Может быть, немного загадочно объяснить, но главное, чтобы преодолеть различные разрешения устройств, - это много работать с:

  • relativelayouts
  • Пиксели, не зависящие от устройства

вы также можете определить DIP в макете XML, чтобы каждый компонент выглядел одинаково на всех типах устройств.

Может быть, глупый пример, но эй, у меня это сработало :-) здесь ниже я попытался сделать так, чтобы размер текста в textview был одинаковым на всех устройствах. Вы можете вызвать класс TypedValue и выбрать одну из множества открытых переменных, предлагаемых там. Поскольку я хотел, чтобы TextView везде имел одинаковый относительный размер, я использовал следующий код:

someTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 18);

число, чтобы установить, насколько большим должен быть размер в DIP. TypedValue можно использовать во многих компонентах виджетов или действий, для которых требуется значение INT для размерных свойств. Поиграйте с этим, и вы увидите, что это делает жизнь намного проще: -p

надеюсь, что этот ответ немного поможет

3 голосов
/ 19 августа 2011

Нет исчерпывающего списка соотношений сторон. Производители могут решить, какое разрешение они чувствуют. Кроме того, пропорции не совпадают с плотностью пикселей, поэтому использование ldpi / mdpi / hdpi для определения соотношения сторон, вероятно, не очень хорошая идея.

Ваша стратегия борьбы с этим действительно зависит от вашей игры. Конечно, в определенной степени вы должны просто масштабировать все больше / меньше, но очевидно, что хитрые части - это края, которые различаются в разных пропорциях. В некоторых играх (шутеры от первого лица, боковые скроллеры, мозаичные нисходящие игры и т. Д.) Вы можете просто предоставить другое поле зрения без особых проблем, если вы не заинтересованы в предоставлении преимущества определенным устройствам, например в других случаях вы можете использовать растягиваемую или мозаичную графику для фона и поддерживать ту же эффективную (масштабированную) игровую область.

2 голосов
/ 19 августа 2011

Вы можете попробовать задать вопрос GameDev.stackexchange.com

Вот та же проблема, что и у вас: Создание игры для разных телефонов с разрешением

0 голосов
/ 24 августа 2011

Вы можете ограничить количество устройств, которые могут видеть вашу игру на рынке, в зависимости от разрешения экрана: http://developer.android.com/guide/appendix/market-filters.html

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

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

Подробнее о поддерживаемых размерах экрана можно узнать здесь: http://developer.android.com/guide/practices/screens_support.html

: D

...