クラスを作る

クラスを作る




何も考えずにクラスの骨格を作りましょう。

Sprite.java
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です。

次はスクリーン座標と仮想描画領域座標との変換を実装してみます。



<前のページ
次のページ>