こいつがいなければ僕のアプリは50fpsで動いていないでしょう(60fpsも出る)
OpenGLESでは圧倒的な描画速度を誇ります。
なぜ速度に拘るかというと、ゲームをプレイしている時の気持ちよさじゃないでしょうか。
いわゆる「ヌルヌル動く」ってやつです。
iアプリの時は15〜20くらいで作っていたんですが、速度が出るなら出したほうがいいですよね。
ただし、当たり前ですが電池の消費は上がります。
その辺の判断も難しいですよね。
glDrawTexiOES()に話を戻します。
ググってもあんまり情報が出てこないので、初めて使う時は困りました。
なんとか調べまくったり試行錯誤を重ねて、僕はこんな関数を作りました。
public void drawTexture(int index, int x, int y, int width, int height, int defX, int defY, int defWidth, int defHeight) { crop[0] = crops[index * 4 + 0] + defX; crop[1] = crops[index * 4 + 1] + defY + defHeight; crop[2] = defWidth; crop[3] = -defHeight; texture.set(gl, index); ((GL11)gl).glTexParameteriv(GL10.GL_TEXTURE_2D, GL11Ext.GL_TEXTURE_CROP_RECT_OES, crop, 0); ((GL11Ext)gl).glDrawTexiOES(x + scrX, scrY + (scrHeight - height) - y, 0, width, height); }
drawTexture()の引数
index…使いたいテクスチャの番号(既にメモリに読み込んでいる状態)
x…x座標
y…y座標
width…画像サイズ横幅
height…画像サイズ高さ
defX…テクスチャ内の使いたい部分x座標
defY…テクスチャ内の使いたい部分y座標
defWidth…テクスチャ内の使いたい幅
defHeight…テクスチャ内の使いたい高さ
これで簡単に画像の切り取り、表示ができます。
例えば
グラビティゲートの画像(この場合テクスチャ番号0とする)で説明すると
これの左向き悪魔をx:32,y:64の位置に32*32で表示したい場合
g.drawTexture(0, 32, 64, 32, 32, 16, 0, 16, 16);
半透明にしたい場合は
g.setAlpha(0.5); g.drawTexture(0, 32, 64, 32, 32, 16, 0, 16, 16);
setAlpha()の中身は
glColor4f()でalpha値を設定しているだけです。
残念なところは回転(rotate)ができないところ
回転は自分で描くのが一番手っ取り早いかも
glDrawTexiOES関しての詳しい内容はググって貰ったほうがいいと思います。
宣伝ですが
Androidアプリ「天上守護門グラビティゲート」配信中です!
無料ですのでダウンロードしてみてください(・∀・ )
宣伝ですが
Androidアプリ「天上守護門グラビティゲート」配信中です!
無料ですのでダウンロードしてみてください(・∀・ )