本文实例讲述了Android实现完整游戏循环的方法。分享给大家供大家参考。具体如下:

1. DroidzActivity.java:

package net.obviam.droidz;

import android.app.Activity;

import android.os.Bundle;

import android.util.Log;

import android.view.Window;

import android.view.WindowManager;

public class DroidzActivity extends Activity {

/** Called when the activity is first created. */

private static final String TAG = DroidzActivity.class.getSimpleName();

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

// requesting to turn the title OFF

requestWindowFeature(Window.FEATURE_NO_TITLE);

// making it full screen

getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

// set our MainGamePanel as the View

setContentView(new MainGamePanel(this));

Log.d(TAG, "View added");

}

@Override

protected void onDestroy() {

Log.d(TAG, "Destroying...");

super.onDestroy();

}

@Override

protected void onStop() {

Log.d(TAG, "Stopping...");

super.onStop();

}

}

2. MainThread.java:

package net.obviam.droidz;

import android.util.Log;

import android.view.SurfaceHolder;

public class MainThread extends Thread {

private static final String TAG = MainThread.class.getSimpleName();

private SurfaceHolder surfaceHolder;

private MainGamePanel gamePanel;

private boolean running;

public void setRunning(boolean running) {

this.running = running;

}

public MainThread(SurfaceHolder surfaceHolder, MainGamePanel gamePanel) {

super();

this.surfaceHolder = surfaceHolder;

this.gamePanel = gamePanel;

}

@Override

public void run() {

long tickCount = 0L;

Log.d(TAG, "Starting game loop");

while (running) {

tickCount++;

// update game state

// render state to the screen

}

Log.d(TAG, "Game loop executed " + tickCount + " times");

}

}

3. MainGamePanel.java:

package net.obviam.droidz;

import android.content.Context;

import android.graphics.Canvas;

import android.view.MotionEvent;

import android.view.SurfaceHolder;

import android.view.SurfaceView;

public class MainGamePanel extends SurfaceView implements

SurfaceHolder.Callback {

private MainThread thread;

public MainGamePanel(Context context) {

super(context);

getHolder().addCallback(this);

// create the game loop thread

thread = new MainThread();

setFocusable(true);

}

@Override

public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {

}

@Override

public void surfaceCreated(SurfaceHolder holder) {

thread.setRunning(true);

thread.start();

}

@Override

public void surfaceDestroyed(SurfaceHolder holder) {

boolean retry = true;

while (retry) {

try {

thread.join();

retry = false;

} catch (InterruptedException e) {

// try again shutting down the thread

}

}

}

@Override

public boolean onTouchEvent(MotionEvent event) {

return super.onTouchEvent(event);

}

@Override

protected void onDraw(Canvas canvas) {

}

}

希望本文所述对大家的Android程序设计有所帮助。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐