現状のソースコードです。
<?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>
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; }
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; }
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; }