Это мой первый пост, поэтому я заранее прошу прощения, если я сделал что-то не так, задавая свой вопрос. Я искал по всей сети конкретный ответ, но не могу его найти, так что вот так .....
Я пишу игру, основанную на Surfaceview, и пока все идет хорошо, однако я хочу переместить мой основной спрайт, например, на 1 пиксель на экране 160DPI в качестве базовой линии (так что в основном 1 DIP как 1 пиксель = 1 DIP на экране 160DPI правильно?)
Я использую следующие форумы:
private static final float spritemovestep = 1f;
final float scale = getResources().getDisplayMetrics().density;
MoveX = (int) (spritemovestep * scale + 0.5f);
А потом ... что-то вроде
SpriteX=SpriteX+MoveX
Первый вопрос - это правильно?
Если это так, может кто-нибудь объяснить, для чего на самом деле + .05f, я читал, что он «округляется до ближайшего числа», но ....
если spritemovestep = 1, то на экране с разрешением 120 точек на дюйм (который возвращает 0,75 в качестве шкалы, я думаю) это будет работать как: 1 x .75 + .5? что будет 1,25? Так для чего же .5?
Кроме того, каков результат, если он приведен к значению int?
В некоторых случаях конечный результат кажется «0» на экране с низкой плотностью, поэтому спрайт вообще не движется.
Также некоторые спрайты, которые должны двигаться с разной скоростью, движутся с одинаковой скоростью с определенной плотностью.
Я уверен, что я глупый и что-то здесь упускаю, но я просто не могу понять, как это должно работать. Если я хочу переместить мой спрайт на 1 DIP / физический пиксель на экране MDPI, как он может перемещаться менее чем на 1 пиксель на экране LDPI?
Кроме того, что это за формула, которую я продолжаю видеть:
px = dp * (dpi / 160) - When is this used?
Буду очень признателен, если кто-нибудь ответит на мои вопросы.
Спасибо всем