Работа с разными экранами - PullRequest
0 голосов
/ 12 мая 2011

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

Из основной статьи я знаю, что в документации по Android SDK я должен создать отдельный ресурс для каждого растрового изображения в моей игре, чтобы обеспечить различную плотность экрана;но я не совсем понимаю, что делать с позициями, скоростями и т. д.

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

Например, я разрабатываю игру (впейзаж) с использованием дисплея высокой плотности 800x480.Теперь мне удобно перемещать спрайт со скоростью 1 пиксель на кадр ( после дельта-времени и т. Д.).Таким образом, это выглядело бы так:

sprite.setVelocityX(1);

Если бы я использовал независимые от плотности единицы, как предполагает документация, не пришлось бы мне делать что-то подобное везде , которое я используюявное число?

sprite.setVelocityX(convert(1));

public float convert(float value)
{
    return value * getResources().getDisplayMetrics().density;
}

Такое чувство, что я не правильно понимаю ...

1 Ответ

1 голос
/ 12 мая 2011

У меня нет опыта в анимации, но первая мысль, которая приходит мне в голову, - определить юнит как

static int UNIT = getResources().getDisplayMetrics().density;

, а затем использовать его как

sprite.setVelocityX(3*UNIT); // replaces sprite.setVelocityX(3);

.как вы создаете int один раз и избегаете запросов DisplayMetrics каждый раз.

При этом могут существовать механизмы OpenGL или AndEngine для непосредственного получения значений, не зависящих от плотности.

...