本文实例讲述了Android实现完整游戏循环的方法。分享给大家供大家参考。具体如下:
1. DroidzActivity.java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
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:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
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:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
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程序设计有所帮助。