1

私は Android ボード ゲームを開発していますが、ズーム可能でスクロール可能なボードの作成について質問があります。ボードには、静的な背景、キャラクター (プレイヤー)、およびタイルを使用して描画される実際の「レベル」が含まれています。

私の解決策は、要素のコレクション (タイル、フィギュア、すべてのゲーム要素 - すべて x、y 座標と幅 + 高さ)、カメラ、および cameraX、cameraY、cameraWidth、cameraHeight に従ってコレクションを描画するレンダラーを用意することです。したがって、ユーザーが右にスクロールすると、カメラは cameraX を適切に設定するだけで、表面はスクロール可能になります。また、ユーザーがズームイン/ズームアウトすると、レンダラーはすべての要素の画像を適切にスケーリングします。

スクロール可能なサーフェスとズームイン/ズームアウトを備えたレンダラーのコード例

    protected function draw(Canvas c){
      Collection elements = collection.getElements(cameraX,cameraY,cameraWidth,cameraHeight);
      if(elements.size() > 0) {
         for(int i = 0; i < elements.size(); i++) {
              elements.get(i).drawElement(c);
         }
      }
    }
    .
    .
    .
    // element class drawElement function
    protected drawElement function(Canvas c) {
        if(this.image != null) {            
          int w = this.width;
          int h = this.height;
          if(this.zoomFactor < 1) {
             w*=this.zoomFactor;
             h*=this.zoomFactor;
          }
          c.drawBitmap(this.image,this.x,this.y,w,h);
        }
    }
  • これが最善の解決策ですか?
  • 他の方法で達成できますか?
  • ScrollView を使用してスクロールを実現できますか?

これは学校のプロジェクトのためなので、エンジンを使いたくありません。

4

1 に答える 1

5

実際、この状況をいくらか単純化することができます。遠近法によって単純に歪んだフラットなテクスチャ平面を実際に探している場合は、AndroidCameraクラスが役立ちます。写真を撮るためのハードウェアカメラとこれを混同しないでください。このカメラは、2Dオブジェクトの変換を実行するために、マトリックスにラップされたヘルパークラスです。「高速フーリエ変換」をグーグルで検索すると、この非常に複雑なレンダリングトピックの詳細を読むことができます。基本的に、キャンバスを作成し、完全に2Dの方法で描画する必要があります。次に、画面に描画する直前に、Cameraクラスを使用してこのキャンバスを変換する必要があります。説明が必要な場合はお知らせください。舞台裏で行われているクールな数学がたくさんあります!

AndroidAPIデモからこのサンプルを見てください

http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/animation/Rotate3dAnimation.html

Androidgraphics.Cameraのドキュメント

http://developer.android.com/reference/android/graphics/Camera.html

于 2011-06-03T16:21:28.473 に答える