package akai.game.monkey.run;
import akai.game.CommonScene;
import akai.game.monkey.run.scene.GameScene;
import android.app.Activity;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.os.Bundle;
import android.os.Handler;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
public class MainActivity extends Activity {
/**the width and height of screen*/
public static float gScreenW, gScreenH;
/**the global world time step*/
public static final float g_STEP_TIME = 1f/60f;
/**the handler of view going*/
private Handler mHandler;
/**the view*/
private MainView mMainView;
/**game state*/
public static final int GAME_STATE_RUNNING = 1, GAME_STATE_PAUSE = 2, GAME_STATE_OVER = 3;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
gScreenW = getWindowManager().getDefaultDisplay().getWidth();
gScreenH = getWindowManager().getDefaultDisplay().getHeight();
mHandler = new Handler();
mMainView = new MainView(this);
setContentView(mMainView);
}
@Override
protected void onResume() {
super.onResume();
mHandler.post(mMainView);
}
@Override
protected void onPause() {
super.onPause();
mHandler.removeCallbacks(mMainView);
}
/**
*
* @author K
*
*/
public class MainView extends SurfaceView implements SurfaceHolder.Callback, Runnable{
private SurfaceHolder mSurfaceHolder;
private Canvas mCanvas;
private Context mContext;
//
private CommonScene mScene;
/**test now*/
//private CommonScene mSceneBg;
public MainView(Context context) {
super(context);
mContext = context;
setKeepScreenOn(true);
setFocusable(true);
setFocusableInTouchMode(true);
mSurfaceHolder = getHolder();
mSurfaceHolder.addCallback(this);
//create scene
mScene = new GameScene(mContext);
//init data of the view
mScene.create();
// mSceneBg.create();
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
//start handler
mHandler.postDelayed(this, (long) (g_STEP_TIME*1000));
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
mHandler.removeCallbacks(this);
}
/**
* every is running here
*/
@Override
public void run() {
long start, end;
start = System.currentTimeMillis();
mScene.step();//go to next step
if(mScene instanceof GameScene) {
GameScene gs = (GameScene)mScene;
if(gs.getmGameState() == MainActivity.GAME_STATE_OVER) {
return;//the world stop
}
}
//mSceneBg.step();
try{
mCanvas = mSurfaceHolder.lockCanvas();
mCanvas.drawColor(Color.BLACK);/**need to draw bg image*/
mScene.draw(mCanvas);
// mSceneBg.draw(mCanvas);
mSurfaceHolder.unlockCanvasAndPost(mCanvas);
}catch(Exception e){
e.printStackTrace();
}
end = System.currentTimeMillis();
if(end - start < 0)System.out.println("end-start:" + (end-start));//for test
mHandler.postDelayed(this, (long) (g_STEP_TIME*1000) - (end - start));
}
@Override
public boolean onTouchEvent(MotionEvent event) {
mScene.onTouchEvent(event);
return true;
}
}
}
- 1
- 2
- 3
前往页