これは私の最初の投稿ですので、ここで質問をする際に何か間違ったことをした場合は、事前にお詫び申し上げます. 特定の答えを求めてネット全体を見てきましたが、見つからないので、ここに行きます.....
私はSurfaceviewに基づいてゲームを書いていますが、これまでのところすべて順調に進んでいますが、メインのスプライトを、たとえば160DPI画面でベースラインとして1ピクセルずつ移動したいと考えています(基本的に1ピクセルとして1 DIP = 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 の場合、120DPI 画面 (私が考えるスケールとして .75 を返します) では、次のようになります: 1 x .75 + .5? 1.25 はどれでしょう?では、.5 は何のためにあるのでしょうか。
また、int 値にキャストした場合の結果はどうなりますか?
一部では、低密度の画面で最終結果が「0」のように見えるため、スプライトがまったく動いていません。
また、異なる速度で移動するはずのいくつかのスプライトが、特定の密度で同じ速度で移動しています。
私は愚かで、ここで何かが欠けていると確信していますが、これがどのように機能するのか理解できません。MDPI 画面でスプライトを 1 DIP/物理ピクセルだけ移動したい場合、LDPI 画面で 1 ピクセル未満移動するにはどうすればよいですか?
また、私が見続けているこの式は何ですか:
px = dp * (dpi / 160) - When is this used?
誰かが私の質問に答えてくれたら本当にありがたいです。
皆さんありがとう