0

これは私の最初の投稿ですので、ここで質問をする際に何か間違ったことをした場合は、事前にお詫び申し上げます. 特定の答えを求めてネット全体を見てきましたが、見つからないので、ここに行きます.....

私は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?

誰かが私の質問に答えてくれたら本当にありがたいです。

皆さんありがとう

4

1 に答える 1

1

あなたが言ったように、+0.5f は最も近い nukber に切り上げることです。理想的には、ldpi の数値を縮小すると、値 1 は 0.75 になり、int にキャストすると 1 未満または ~=0 として表現されます。丸め数値を追加することにより、この数値は 1.25 に引き上げられます。これを int としてキャストすると、<2 または ~=1 になります。このように、スプライトは最小移動 1 で描画される必要があります。異なる速度で移動するスプライトが同じ速度で移動する唯一の理由は、スプライトが非常に近いため、丸めたときにスケールを使用して同じサイズになってしまう場合です。あなたが与えた。全体として、あなたの方程式は、私が見た他のものと非常に似ています。私は、私が働いている会社でも SurfaceView を使用するゲームを作成しています。コードの詳細については説明できませんが、あなたの問題は私がしばらくの間苦労したものです。あなたの物理学がどのように更新されるかわかりませんが、しかし、おそらくそれはチェックすべきことです。具体的には、ゲーム タイマーのティック数をカウントする方法です。アプリケーションは、int へのキャスト後に 1.25 または 1 を移動するポイントに到達するには、あまりにも接近しているため、ティックを読み取っているため、スプライトが動かないように見える可能性があります。私はその問題を簡単に経験し、エラーがタイマーにあることがわかるまで、最初は速度を見ていました。私が気付いたもう1つのことは、アルゴリズムが密度を収集することです。mdpi デバイスでは、これは 1 または 160 を返しますか? それは大きな違いを生む可能性がありますが、私が使用した方程式が異なっていたので、わかりません. あなたが見つけた他の方程式は、android.developer.com の開発ガイドにリストされている方程式を言い換えたもので、os がピクセルをディップに変換する方法を説明しています。人々が引用する理由は、他の人が自分のアプリの好みに合わせてスケーリングするための独自のアルゴリズムを構築するのに役立つリファレンスを提供することです。現時点で私ができる最善の答えであるため、それが役立つことを願っています。入力ミスがあれば申し訳ありませんが、これは私の携帯電話から送信しています

于 2012-02-04T17:55:59.240 に答える