何も考えずにクラスの骨格を作りましょう。
package <パッケージ名>; import java.nio.FloatBuffer; import javax.microedition.khronos.opengles.GL10; import android.graphics.Point; import android.graphics.PointF; import android.graphics.Rect; import android.opengl.GLU; import <パッケージ名>.Texture; import <パッケージ名>.Color; // スプライト public class Sprite { // コンストラクタ public Sprite( DrawDevice drawDevice ) { m_DrawDevice = drawDevice; // 頂点情報バッファ作成 { m_VertexPos = new BufferSet(); m_ImageRect = new BufferSet(); m_VertexColor = new BufferSet(); { m_VertexPos.Create( VERTEX_NUM * VERTEX_POS_ELEMENT_NUM ); m_ImageRect.Create( VERTEX_NUM * IMAGE_POS_ELEMENT_NUM ); m_VertexColor.Create( VERTEX_NUM * VERTEX_COLOR_ELEMET_NUM ); } } m_DrawScaleRate = 1.0f; m_StatusBarHeight = 0; m_DrawOffset = new Point( 0, 0 ); m_CameraModeOffset = new PointF( 0.0f, 0.0f ); m_ScaleColor = Color.White(); m_DrawColor = Color.White(); m_bScreenMode = true; m_PrevDrawColor = new Color( 0.0f, 0.0f, 0.0f, 0.0f ); SetLookPos( new PointF( 0.0f, 0.0f )); } // バッファセット private class BufferSet { // コンストラクタ public BufferSet() { m_FloatBuffer = null; } // 作成 public void Create( int arrayNum ) { m_FloatBuffer = FloatBuffer.allocate( arrayNum ); } // 配列設定 public void SetArray( float[] aValue ) { m_FloatBuffer.put( aValue ); m_FloatBuffer.position( 0 ); } // Floatバッファ取得 public FloatBuffer GetFloatBuffer() { return m_FloatBuffer; } private FloatBuffer m_FloatBuffer; } final static int VERTEX_NUM = 4; final static int VERTEX_POS_ELEMENT_NUM = 2; final static int IMAGE_POS_ELEMENT_NUM = 2; final static int VERTEX_COLOR_ELEMET_NUM = 4; private DrawDevice m_DrawDevice; private BufferSet m_VertexPos; private BufferSet m_ImageRect; private BufferSet m_VertexColor; private float m_DrawScaleRate; private int m_StatusBarHeight; private Point m_DrawOffset; private PointF m_CameraModeOffset; private Color m_ScaleColor; private Color m_DrawColor; private boolean m_bScreenMode; private Color m_PrevDrawColor; }
これがクラスの骨格です。
コンストラクタでは前メンバ変数を初期化します。
この時、メンバ変数がnullのものはなくしましょう。
使う度にnewをしていたのでは遅くなるので必要な物は全てここで作っておきます。
BufferSetというインナークラスがありますがこれはあとで必要になります。
とりあえず今はこういうものがあるという感覚でOKです。
次はスクリーン座標と仮想描画領域座標との変換を実装してみます。