現在Androidでゲームを作成しているのですが、座標の指定が機種によって変わってしまうことに気づきました。
例えば画像を指定した位置に描画したいときに今までは
image.createScaledBitmap(image,100,200,false);
というようにしていました。
しかし、これでは、機種によって画像が描画される位置が変わってしまい思ったとおりの動作をしてくれません。
どうすればよいのかまったく分からず、質問してしまいました。
検索をかけると、絶対座標ではなく、相対座標で指定するなど書かれていますが、肝心の絶対座標から相対座標に変換する方法が書かれていません。
どうすれば、機種に依存することなく、正しい位置に描画されるのでしょうか?
Androidでの相対座標
Re: Androidでの相対座標
ゲーム画面が、左上(あるいは左下)の隅に寄ってしまうので、解像度に依らずデバイス画面全体に表示したい、ということですか?
Bitmap#createScaledBitmapは描画命令ではないですし、状況が分かりません。
↓この部分がどういう状況なのかを具体的に説明していただけますか。
Bitmap#createScaledBitmapは描画命令ではないですし、状況が分かりません。
↓この部分がどういう状況なのかを具体的に説明していただけますか。
Androidでの相対座標 さんが書きました:しかし、これでは、機種によって画像が描画される位置が変わってしまい思ったとおりの動作をしてくれません。
Re: Androidでの相対座標
ご返信有難うございます。
image.createScaledBitmap(image,100,200,false);
ではなく
image.drawBitmap(image,100,200,paint);
でした。申し訳ございません。
>>しかし、これでは、機種によって画像が描画される位置が変わってしまい思ったとおりの動作をしてくれません。
この部分ですが、
普通に背景を描画するだけでは、右、下が黒くなってしまうので、 bitmap.createScaledBitmap() を使用して、
背景を拡大してフルスクリーンで描画しました。
そして、背景画像の「電球がある箇所」に画像を描画させました。
すると、 機種によって、背景画像が拡大したり縮小したりするので、「電球がある箇所」より若干ずれて描画されてしまいます。
このずれをなくしたいのですが、どうすればよいでしょうか?
例(10X3)
↓適切な位置
・・・・●・・・・・
・・・・・・・・・・
・・・・・・・・・・
(12X4)
↓ずれてしまう
・・・・●・・・・・・・
・・・・・・・・・・・・
・・・・・・・・・・・・
・・・・・・・・・・・・
●=画像 ↓=電球の位置
説明不足で申し訳ございませんでした。
image.createScaledBitmap(image,100,200,false);
ではなく
image.drawBitmap(image,100,200,paint);
でした。申し訳ございません。
>>しかし、これでは、機種によって画像が描画される位置が変わってしまい思ったとおりの動作をしてくれません。
この部分ですが、
普通に背景を描画するだけでは、右、下が黒くなってしまうので、 bitmap.createScaledBitmap() を使用して、
背景を拡大してフルスクリーンで描画しました。
そして、背景画像の「電球がある箇所」に画像を描画させました。
すると、 機種によって、背景画像が拡大したり縮小したりするので、「電球がある箇所」より若干ずれて描画されてしまいます。
このずれをなくしたいのですが、どうすればよいでしょうか?
例(10X3)
↓適切な位置
・・・・●・・・・・
・・・・・・・・・・
・・・・・・・・・・
(12X4)
↓ずれてしまう
・・・・●・・・・・・・
・・・・・・・・・・・・
・・・・・・・・・・・・
・・・・・・・・・・・・
●=画像 ↓=電球の位置
説明不足で申し訳ございませんでした。
Re: Androidでの相対座標
解決したときはどのようにして解決したのかを書いてください。
Bitmapに画像が読み込まれるとき、端末解像度に合わせて勝手に拡大縮小されます。
res/drawable-nodpiに置いた画像ファイルは常に自動的に拡大縮小されません。
BitmapFactory.Optionsを引数に取るBitmapFactory.decodeResourceを使い、inScaledをfalseに設定したBitmapFactory.Optionsを与えると一時的に無効化できます。
Bitmapに画像が読み込まれるとき、端末解像度に合わせて勝手に拡大縮小されます。
res/drawable-nodpiに置いた画像ファイルは常に自動的に拡大縮小されません。
BitmapFactory.Optionsを引数に取るBitmapFactory.decodeResourceを使い、inScaledをfalseに設定したBitmapFactory.Optionsを与えると一時的に無効化できます。