ソースコード

ソースコード




現状のソースコードです。

AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.hitman" android:versionCode="1" android:versionName="1.0">
    <uses-sdk android:minSdkVersion="7" />
    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".MainActivity"
                  android:label="@string/app_name"
                  android:configChanges="orientation|keyboardHidden"
                  android:screenOrientation="landscape">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>
MainActivity.java
package com.hitman;

import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL10;

import android.app.Activity;
import android.graphics.PointF;
import android.graphics.Rect;
import android.os.Bundle;
import android.opengl.GLSurfaceView;
import android.view.MotionEvent;

import com.hitman.Graphics.DrawDevice;
import com.hitman.Input.TouchEventObject;
import com.hitman.Input.TouchManager;
import com.hitman.Input.TouchWatcher;
import com.hitman.Model.Model;
import com.hitman.Resource.AppResource;
import com.hitman.Resource.TextureResource;



//  メインアクティビティ
public class MainActivity extends Activity implements GLSurfaceView.Renderer
{
    //  コンストラクタ
    public  MainActivity()
    {
        super();

        m_View          = null;

        m_DrawDevice    = null;

        m_TouchWatcher  = null;
        m_TouchMngr     = null;
        m_Button        = null;

        m_AppRes        = null;
        m_TexRes        = null;

        m_Hitman        = null;
        m_Back          = null;
        m_Bill          = null;
    }

    //  作成
    @Override
    public void onCreate( Bundle savedInstanceState )
    {
        super.onCreate( savedInstanceState );

        m_View  = new GLSurfaceView( this );
        m_View.setRenderer( this );

        m_DrawDevice    = new DrawDevice();

        m_TouchWatcher  = new TouchWatcher();
        m_TouchMngr     = new TouchManager( m_TouchWatcher );
        m_Button        = new TouchButton( m_TouchMngr );
        {
            m_Button.SetRect( 0, 0, ( int )DrawDevice.DRAW_WIDTH, ( int )DrawDevice.DRAW_HEIGHT );
        }

        m_AppRes        = new AppResource( this );
        m_TexRes        = new TextureResource( m_AppRes, m_DrawDevice );

        App.SetTextureResource( m_TexRes );

        setContentView( m_View );
    }

    //  再開
    @Override
    public void onResume()
    {
        super.onResume();

        m_View.onResume();
    }

    //  一時停止
    @Override
    public void onPause()
    {
        m_View.onPause();

        super.onPause();
    }

    //  サーフェイスが作られた
    @Override
    public void onSurfaceCreated( GL10 gl, EGLConfig config )
    {
        m_DrawDevice.Create( gl );
    }

    //  サーフェイスのサイズが変わった
    @Override
    public void onSurfaceChanged( GL10 gl, int width, int height )
    {
        Rect    recr    = new Rect();
        m_View.getWindowVisibleDisplayFrame( recr );

        m_DrawDevice.UpdateDrawArea( gl, width, height, recr.top );
    }

    //  描画フレーム
    @Override
    public void onDrawFrame( GL10 gl )
    {
        //  シーンの更新
        m_DrawDevice.Begin( gl );
        {
            m_TouchMngr.Update();

            //  モデルがなければ作る
            if( m_Hitman == null )
            {
                m_Hitman    = new Model();
                m_Back      = new Model();
                m_Bill      = new Model();

                m_Hitman.CreateChara(   "test_ene"    );
                m_Back.CreateBack(      "back"        );
                m_Bill.CreateBack(      "bill"        );
            }

            //  描画
            if( m_Back != null )
            {
                //  まず、背景を描画
                m_Back.Draw( 0.0f, 0.0f, m_DrawDevice );
            }
            if( m_Hitman != null )
            {
                //  次にキャラを描画
                for( int y = 0; y < 3; ++y )
                {
                    for( int x = 0; x < 3; ++x )
                    {
                        m_Hitman.Draw(( float )x * 92.0f + 108.0f, ( float )y * 72.0f + 71.0f, m_DrawDevice );
                    }
                }
            }
            if( m_Bill != null )
            {
                //  最後にビルを描画する
                m_Bill.Draw( 0.0f, 0.0f, m_DrawDevice );
            }
        }
        m_DrawDevice.End();

        //  タッチイベント監視人更新
        m_TouchWatcher.Update();
    }

    //  タッチイベント
    @Override
    public boolean  onTouchEvent( MotionEvent event )
    {
        final float orgTouchPosX    = event.getX();
        final float orgTouchPosY    = event.getY();
        PointF          touchPos        = m_DrawDevice.GetSprite().ScreenPosToDrawPos( new PointF( orgTouchPosX, orgTouchPosY ));

        TouchWatcher.ACTION action;

        switch( event.getAction())
        {
        case MotionEvent.ACTION_DOWN:   action  = TouchWatcher.ACTION.ACTION_DOWN;  break;
        case MotionEvent.ACTION_MOVE:   action  = TouchWatcher.ACTION.ACTION_MOVE;  break;
        case MotionEvent.ACTION_UP:     action  = TouchWatcher.ACTION.ACTION_UP;    break;
        default:
            return true;
        }

        if( !m_TouchWatcher.AddAction( action, touchPos ))
        {
            System.err.println( "TouchEventOverFlow!!" );
        }

        return true;
    }



    private GLSurfaceView       m_View;

    private DrawDevice          m_DrawDevice;

    private TouchWatcher        m_TouchWatcher;
    private TouchManager        m_TouchMngr;
    private TouchButton     m_Button;

    private AppResource     m_AppRes;
    private TextureResource m_TexRes;

    private Model               m_Hitman;
    private Model               m_Back;
    private Model               m_Bill;
}



//  タッチボタン
class TouchButton extends TouchEventObject
{
    //  コンストラクタ
    public  TouchButton( TouchManager mngr )
    {
        super( mngr );

        m_TouchPos  = new PointF();
    }

    //  触れた場所を取得
    public PointF   GetTouchPos()
    {
        return m_TouchPos;
    }

    //  更新
    @Override
    public void Update()
    {
    }

    //  指が離れた
    @Override
    public void OnTouchUp( PointF pos )
    {
    }

    //  指がそっと触れた(激しいかもしれない)
    @Override
    public void OnTouchDown( PointF pos )
    {
    }

    //  指が動いた
    @Override
    public void OnTouchMove( PointF pos )
    {
        //  移動した位置を記憶
        m_TouchPos.set( pos );
    }

    //  指がどこかへ去っていった
    @Override
    public void OnTouchOut( PointF pos )
    {
    }



    private PointF  m_TouchPos;
}
App.java
package com.hitman;

import com.hitman.Resource.TextureResource;



//  アプリケーションクラス
public class App
{
    //  取得
    public static TextureResource   GetTextureResource()    { return GetInstance().m_TexRes;    }



    //  設定
    public static void  SetTextureResource( TextureResource texRes )    { GetInstance().m_TexRes    = texRes;   }



    //  インスタンス取得
    private static App  GetInstance()
    {
        if( s_Instance == null )
        {
            s_Instance  = new App();
        }
        return s_Instance;
    }

    //  コンストラクタ
    private App()
    {
        super();

        m_TexRes    = null;
    }



    private static App  s_Instance  = null;

    private TextureResource m_TexRes;
}
Model.java
package com.hitman.Model;

import android.graphics.PointF;
import android.graphics.Rect;

import com.hitman.App;
import com.hitman.Graphics.DrawDevice;
import com.hitman.Graphics.Sprite;
import com.hitman.Graphics.Sprite.DrawParam;
import com.hitman.Graphics.Texture;
import com.hitman.Resource.TextureResource;



//  モデル
public class Model
{
    //  コンストラクタ
    public  Model()
    {
        super();

        m_Image         = null;
        m_ImgaeCenter   = null;
        m_ImageRect     = null;
    }

    //  背景作成
    public void CreateBack( String imageName )
    {
        _LoadImage( imageName, TextureResource.TEXTURE_TYPE.BACK );
        _CreateDrawInfo( 0.0f, 0.0f, 0, 0, ( int )DrawDevice.DRAW_WIDTH, ( int )DrawDevice.DRAW_HEIGHT );
    }

    //  キャラ作成
    public void CreateChara( String imageName )
    {
        _LoadImage( imageName, TextureResource.TEXTURE_TYPE.CHARA );

        final float width   = m_Image.GetWidth();
        final float height  = m_Image.GetHeight();

        _CreateDrawInfo( width * 0.5f, height, 0, 0, ( int )width, ( int )height );
    }

    //  描画
    public void Draw( float posX, float posY, DrawDevice drawDevice )
    {
        Sprite      sprite      = drawDevice.GetSprite();
        DrawParam   drawParam   = sprite.CreateDrawParam( m_Image );
        {
            drawParam.m_Pos.set( posX, posY );
            drawParam.m_ImageCenter.set( m_ImgaeCenter );
            drawParam.m_ImageRect.set( m_ImageRect );
        }
        sprite.Draw( drawParam );
    }



    //  テクスチャ読み込み
    private void    _LoadImage( String imageName, TextureResource.TEXTURE_TYPE texType )
    {
        m_Image = App.GetTextureResource().Load( imageName, texType );
    }

    //  描画情報を作成
    private void    _CreateDrawInfo( float cx, float cy, int left, int top, int right, int bottom )
    {
        m_ImgaeCenter   = new PointF( cx, cy );
        m_ImageRect     = new Rect( left, top, right, bottom );
    }



    private Texture m_Image;
    private PointF      m_ImgaeCenter;
    private Rect        m_ImageRect;
}


次のページ>