Перед тем, как начать разрабатывать игры на андроид, я долгое время делал браузерные flash игры. Там все легко, задал размер 700*525 и все. Когда столкнулся с андроидами, то и дело натыкался на слова, — «Размер экрана на андроид — это целая наука». Да, это наука. Но мы сегодня разберем на практике один пример. Я не сказал бы что он идеален, но практика показала, что он работает,
хоть и не устойчиво. Но я им пользуюсь.
Для начала грубо берем:
— самый маленький размер экрана 480*800
— самый большой размер экрана 1300*1920
… и создаем средний размер, у меня это 720*1280:

Теперь у нас есть 3-и размера экрана: x1, x2, x3.
Далее нам нужно узнать, какой у нас размер экрана, на котором запущена игра (все это делаем, в самом начале игры)? Во flash на языке as3 это:
var m_stageW:int = flash.system.Capabilities.screenResolutionX;
var m_stageH:int = flash.system.Capabilities.screenResolutionY;
После узнаем размера экрана в иксах:
var m_sizeStageX:int;
if (m_stageH<= 800)
{
m_sizeStageX = 1;
}
else
if (m_stageH> 1280)
{
m_sizeStageX = 3;
}
else
{
m_sizeStageX = 2;
}
У меня 7-ми дюймовый планшет. Размер экрана 600*1024. (У меня переменная m_stageH = 1024). Значит для меня m_sizeStageX = 2; Игра будет использовать для моего планшета графику размера x2.
Что такое рабочая зона?
Рабочая зона есть только в x2, x3. Она обозначена зеленым цветом:

Все что находится в рабочей зелёной зоне x3 должно влазить в рабочею зелёную зону x2:

Все что находится в рабочей зелёной зоне x2 должно влазить в экран x1:

Я использовал 3-и размера графики, что бы не было потери качества. Вся графика рисовалась под самый большой размер экрана x3. А после я ручками уменьшал для всех остальных экранов с отношением:
x2 = 70%
x1 = 50%
Например, кнопка выхода в меню. На самом большом экране она имеет размер 100*100 пикселей. Значит для экрана x2 уменьшаем картинку до 70% и получаем 70*70 пикселей. Для экрана x1 получится 50*50 пикселей. И в итоге у Вас получится три кнопки. По каждой для каждого экрана.

Грубо говоря, Вы делаете не одну игру, а сразу три. Ведь каждый объект игры нужно сделать трижды. Но это рационально для объектов, которые нужно выделить. Которые на переднем плане, с которыми игрок взаимодействует.
Давайте разберем меню игры. Красными стрелочками я обозначил те объекты, которые я сделал для всех размеров экранов:
— название игры;
— парень с девушкой;
— кнопки меню;
Эти объекты будут супер качественные. А все остальное: небо, дом, земля, хмарки будут размыты. Потому что я буду изменять их размер под каждый экран обычным растягиванием. А при растягивании, качество картинки теряется:

Все объекты сцены выставляются программно, желательно от центра экрана. Или берется соотношения сторон. Например, как я выставлял кнопки меню на предыдущем рисунке? Кнопку Play я поставил по центру. Кнопку перехода на сайт (та что слева) — это левая половина экрана разделена на 2. Правая кнопка (стереть прогресс) аналогично левой.
Вывод:
Поначалу дико неудобно, но со временем привыкаешь. Сейчас разрабатываю вторую часть игры Building cubes2, но уже на юнити. Flash в доску задолбал меня своими тормозами.
Всем спасибо, кто дочитал до конца. Пытался вкратце описывать, не растягивать скучными буквами. До нового скила.
хоть и не устойчиво. Но я им пользуюсь.
Для начала грубо берем:
— самый маленький размер экрана 480*800
— самый большой размер экрана 1300*1920
… и создаем средний размер, у меня это 720*1280:

Теперь у нас есть 3-и размера экрана: x1, x2, x3.
Далее нам нужно узнать, какой у нас размер экрана, на котором запущена игра (все это делаем, в самом начале игры)? Во flash на языке as3 это:
var m_stageW:int = flash.system.Capabilities.screenResolutionX;
var m_stageH:int = flash.system.Capabilities.screenResolutionY;
После узнаем размера экрана в иксах:
var m_sizeStageX:int;
if (m_stageH<= 800)
{
m_sizeStageX = 1;
}
else
if (m_stageH> 1280)
{
m_sizeStageX = 3;
}
else
{
m_sizeStageX = 2;
}
У меня 7-ми дюймовый планшет. Размер экрана 600*1024. (У меня переменная m_stageH = 1024). Значит для меня m_sizeStageX = 2; Игра будет использовать для моего планшета графику размера x2.
Что такое рабочая зона?
Рабочая зона есть только в x2, x3. Она обозначена зеленым цветом:

Все что находится в рабочей зелёной зоне x3 должно влазить в рабочею зелёную зону x2:

Все что находится в рабочей зелёной зоне x2 должно влазить в экран x1:

Я использовал 3-и размера графики, что бы не было потери качества. Вся графика рисовалась под самый большой размер экрана x3. А после я ручками уменьшал для всех остальных экранов с отношением:
x2 = 70%
x1 = 50%
Например, кнопка выхода в меню. На самом большом экране она имеет размер 100*100 пикселей. Значит для экрана x2 уменьшаем картинку до 70% и получаем 70*70 пикселей. Для экрана x1 получится 50*50 пикселей. И в итоге у Вас получится три кнопки. По каждой для каждого экрана.

Грубо говоря, Вы делаете не одну игру, а сразу три. Ведь каждый объект игры нужно сделать трижды. Но это рационально для объектов, которые нужно выделить. Которые на переднем плане, с которыми игрок взаимодействует.
Давайте разберем меню игры. Красными стрелочками я обозначил те объекты, которые я сделал для всех размеров экранов:
— название игры;
— парень с девушкой;
— кнопки меню;
Эти объекты будут супер качественные. А все остальное: небо, дом, земля, хмарки будут размыты. Потому что я буду изменять их размер под каждый экран обычным растягиванием. А при растягивании, качество картинки теряется:

Все объекты сцены выставляются программно, желательно от центра экрана. Или берется соотношения сторон. Например, как я выставлял кнопки меню на предыдущем рисунке? Кнопку Play я поставил по центру. Кнопку перехода на сайт (та что слева) — это левая половина экрана разделена на 2. Правая кнопка (стереть прогресс) аналогично левой.
Вывод:
Поначалу дико неудобно, но со временем привыкаешь. Сейчас разрабатываю вторую часть игры Building cubes2, но уже на юнити. Flash в доску задолбал меня своими тормозами.
Всем спасибо, кто дочитал до конца. Пытался вкратце описывать, не растягивать скучными буквами. До нового скила.