0

2D ロールプレイング ゲームのプロトタイプを「実際の製品」にリエンジニアリングすることを計画しています。その場合、Android Canvas の代わりに openGl を使用することを考えています。

考えている理由は、ゲームをさまざまな画面解像度のデバイスで動作させたいからです。そうするために、2D ゲームテクスチャが動いている壁に面した openGl の Cameraview を使用することを考えました。現在のデバイスの解像度がゲームコンテンツ全体に対して小さすぎる場合、カメラフレームが「壁」の端に到達するまで、キャラクターが常に中央にくるようにカメラビューを移動します。これは可能な解決策ですか、それとも別の方法を選択しますか?

キャンバスでできるように、openGlでスプライトを描くことさえ可能ですか? 単純に、複数のレイヤーが互いに重なっているようなものです。最初は、ライフバーとして単純な四角形などの数字よりもタイル (その上の赤いライフよりも最初の背景) などです。

positionRect = new Rect(this.getPositionX(), this.getPositionY()
            - (this.spriteHeight - Config.BLOCKSIZE), this.getPositionX()
            + Config.BLOCKSIZE, this.getPositionY() + Config.BLOCKSIZE);
spritRect = new Rect(0, 0, Config.BLOCKSIZE, spriteHeight);
canvas.drawBitmap(this.picture, spritRect, positionRect, null);

もしそうなら、最初の背景とおそらく最初のドット(.png画像)を取得することから始めるにはどうすればよいですか? 適切なキックオフを提供するチュートリアルが見つかりませんでした。GLSurfaceView などのプロジェクトをセットアップする方法を知っています。

4

2 に答える 2

2

少し調整が必要ですが、可能で非常に簡単です。チュートリアルを入手していくつかの簡単なプログラムを開始できるので、いくつかの指針を示します。

まず第一に、予測を調べる必要があります。射影行列では" glFrustumf" または " "を使用できます。glOrthof最初のものは 3D に多く使用されるため、Ortho を使用します。このメソッド内のパラメーターは、画面の座標系の境界を表します。それらをほとんどの「ビュー」システムと同じにしたい場合は、値を挿入しますtop=0, left=0, right=view.width, right=view.height

次のように、rect の代わりに正方形のバッファーを作成できるようになりました。

float[] buffer = 
{origin.x, origin.y, 
origin.x, origin.y+size.height,
origin.x+size.width, origin.y+size.height,
origin.x+size.width, origin.y,
};

そしてテクスチャ座標は

float[] textureCoordinates = 
    {.0, .0, 
    .0, 1,
    1, 1,
    1, .0,
    };

また、プラットフォームに依存するため、ウィッチがGoogleまたはスタックオーバーフローを使用するために、テクスチャをロードする必要があります(一部の初期化で、可能であれば1回だけ)...

draw メソッドで結合するために必要なのは、これだけです。

enableClientState(vertexArray)
enableClientState(texCoordArray)
enable(texture2d)

//for each object:
vertexPointer(buffer)
texCoordPointer(textureCoordinates) //unless all are same
bindTexture(theTextureRepresentingTheSpriteYouWant)
draw(triangleStrip, 4)

移動に関しては、モデル マトリックスで translate を使用します。

pushMatrix()
translatef(x, y, .0)
drawScene()
popMatrix()
于 2013-03-11T15:09:50.473 に答える
1

opengl を使用する場合、「ウィンドウ」のサイズに制約されません。世界の射影行列とビューポートを定義し、「カメラ」を変更するには、射影行列とビューポートをいじるだけです。もし私があなただったら、このプロジェクトを始める前に opengl の本を手に取って、opengl がどのように機能するかを知っているようにします。

また、Java を使用している場合は、GLSurfaceView クラスを使用する必要があります。これにより、すべてのスレッドとすべてが処理されるため、心配する必要はありません。

于 2013-03-11T15:22:59.960 に答える