大きな背景画像が表示され、他の画像がクリック可能な特定の場所に表示される簡単なAndroidゲームを作成したいと思います。
これが私が話していることの簡単なサンプル画像です:
ユーザーはサッカー選手またはムースをタップできる必要があります(ああ、古典的な「サッカー選手のムースの問題」です!)
ユーザーが画面を操作でき、さまざまなデバイスで適切に拡大縮小できるように、この画面をどのようにレンダリングする必要がありますか(どのレイアウトとビューですか?)?
大きな背景画像が表示され、他の画像がクリック可能な特定の場所に表示される簡単なAndroidゲームを作成したいと思います。
これが私が話していることの簡単なサンプル画像です:
ユーザーはサッカー選手またはムースをタップできる必要があります(ああ、古典的な「サッカー選手のムースの問題」です!)
ユーザーが画面を操作でき、さまざまなデバイスで適切に拡大縮小できるように、この画面をどのようにレンダリングする必要がありますか(どのレイアウトとビューですか?)?
私はRelativeLayoutを使用します。
背景画像をレイアウトに設定できます(高さと幅はfill_parent)。
次に、ムースとサッカー選手を含むImageViewsを、シーンの上面または側面に対して、または相互に相対的なレイアウトに配置できます(すべてに「dp」単位を指定してください)。ImageViewsの背景を透明に設定すると、バウンディングボックスの問題が発生しなくなります(または、ImageViewsの配置を相互に相対的に設定して、重ならないようにすることもできます)。
これが最も簡単な方法だと思います。アクティビティのImageViewにonClickListenerをアタッチするのは非常に簡単で、これで完了です。
このタイプのレイアウトは、すべてのデバイスと画面サイズで同じように機能します。
RelativeLayoutsにはいくつかの小さな落とし穴がありますが、それらに入ると非常に単純であり、高速レンダリングを提供します(ビュー階層は通常浅いため)。幸運を。
クリック可能な要素のImageViewは、私には良い選択のように思えます。背景については、画像を親レイアウト、つまりRelativeLayoutの背景として設定します。
全体(フィールドを背景として)のSurfaceViewと、追加された要素の通常の* ImageView *s。SurfaceViewからクリック座標を簡単に復元できるため、どの要素がタッチされたかを知ることができます。
とにかくSurfaceViewはあなたに追加の可能性を提供するかもしれません。
FoamyGuyが言ったように、ほとんどの画像では、それぞれにImageViewを使用します。
バウンディングボックスの重なりが問題になるほど近くにある場合でも、それぞれにImageViewを使用できますが、この回答のバリエーションを使用して、範囲内の各ImageViewのアルファをテストします。
FoamyGuyとBoogerの両方に同意します。唯一の目標が静止画像を画面に配置して、クリックすると何かを実行することである場合、RelativeLayoutとImageViewsを最後まで実行します。
しかし...複数の画像を間隔を置いてランダムに画面にスポーンし、爆発が起こって乙女が誘拐されている間にプレーヤーが対話できるようにそれらを移動させる場合は、SurfaceView、Canvas、Drawable、 TouchEvents、およびFrameBuffers。