0

現在開発中のゲームに取り組み始めたときに読んだ内容に基づいて、Android での openGL は 3D で作業する場合にのみ有効であるという結論に達しました。また、surfaceView 上のキャンバスが 2D ゲームを構築する最良の方法であるという結論に達しました。

その考えに基づいて、理論的には、開発用電話の画面と宛先電話の比率に基づいて、ロードされたすべての画像をスケーリングするカスタム画像クラスをプログラムしました。この scaleX と scaleY の考え方は、ゲーム全体で一貫しています。すべてのポイント、画像、速度などに倍率が掛けられます。

ゲームを別のデバイスに展開すると、毎回強制終了します。コードの膨大なウェブのどこかで、カスタムの自動スケーリング システムがうまくいかなかったのです。最近の読書で、私はすべてを調整して OpenGL を使用することにしました。それが私の質問の出番です。

ゲームがネイティブ解像度でプレイされていると思わせる方法はありますか?IEはすべての入力座標を携帯電話の画面で表す座標に簡単に変換します。 基本的に、540 x 960 の画面をシミュレートし、その写真を撮り、その写真を適切に拡大縮小してユーザーの画面に表示したいと考えています。

すべてを絶対座標で描画したキャンバスを作成し、そのキャンバスの写真を 540 x 960 の領域で撮影して、最初のキャンバスの写真をユーザーに表示されるキャンバスに描画できるようにするにはどうすればよいですか? ?

編集:

1. ゲームのネイティブ解像度であるイメージ/キャンバス/モノを作成します。2. 上記の画像にすべてを描画し、現在のゲームの状態をネイティブ解像度で作成します。3. その画像を取得し、デバイスの画面サイズに合わせてスケーリングします。 4. ゲーム ボードをユーザーに表示します。

タッチ入力の場合、ユーザーがタッチしている座標を取得し、それに倍率を掛けます (現在の幅に対するネイティブの幅と高さの y の比率も同じです)。

これにより、すべてを再コーディングしなくても、簡単な変更を加えてゲームを機能させ続けることができます。これによりパフォーマンスが低下する場合は、おそらく OpenGL を使用する必要があります。それ以外の場合は、そのシステムを使用します。

私の計画は、次のようなことをすることでした:

Canvas canvas = new Canvas(bitmap);

ビットマップがネイティブ画面のサイズの画像である場合、既存のコードをすべて使用します。

EDI2:

マトリックスでスケーリングするには、次のようにしますか?

Canvas canvas; 
Matrix matrix = new Matrix();
matrix.postScale(screenWidth/stockWidth, screenHeight/stockHeight);
canvas.setMatrix(matrix);

....

Game Loop Logic with no image scaling, just drawing and updating of canvas based on   
stock size.

あれは正しいですか?

4

1 に答える 1

1

Canvas で setMatrix メソッドを使用して、必要なスケーリングを一度計算し、コードで固定座標系を使用することができます。

2D 用の openGL に関しては、Canvas よりもはるかに高速に動作し、ビットマップ用のメモリ バッファーが大きくなります。Canvas は小規模なゲームには適していますが、集中的なゲームには適していません。

于 2012-05-16T15:44:05.583 に答える