AndroidGame类是书中设计的一个综合类,作用如下
Perform window management. In our context, this means setting up an
activity and an AndroidFastRenderView, and handling the activity life cycle in
a clean way.
Use and manage a WakeLock so that the screen does not dim.
Instantiate and hand out references to Graphics, Audio, FileIO, and Input to
interested parties.
Manage Screens and integrate them with the activity life cycle.
对window进行管理,在上下文中对Activity和AndroidFastRenderView进行设置,并以一个干净的方式来处理Activity的生命周期
使用和管理WakeLock,使屏幕不至于休眠
实例化 Graphics, Audio, FileIO, Input 到它们的使用方
管理Screens并把它集成到Activity的生命周期中
下面是AndroidGame要实现的接口,Game
package com.badlogic.androidgames.framework; public interface Game { public Input getInput(); public FileIO getFileIO(); public Graphics getGraphics(); public Audio getAudio(); public void setScreen(Screen screen); public Screen getCurrentScreen(); public Screen getStartScreen(); }AndroidGame
package com.badlogic.androidgames.framework.impl; import android.app.Activity; import android.content.Context; import android.content.res.Configuration; import android.graphics.Bitmap; import android.graphics.Bitmap.Config; import android.os.Bundle; import android.os.PowerManager; import android.os.PowerManager.WakeLock; import android.view.Window; import android.view.WindowManager; import com.badlogic.androidgames.framework.Audio; import com.badlogic.androidgames.framework.FileIO; import com.badlogic.androidgames.framework.Game; import com.badlogic.androidgames.framework.Graphics; import com.badlogic.androidgames.framework.Input; import com.badlogic.androidgames.framework.Screen; public abstract class AndroidGame extends Activity implements Game { AndroidFastRenderView renderView; Graphics graphics; Audio audio; Input input; FileIO fileIO; Screen screen; WakeLock wakeLock; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); boolean isLandscape = getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE; int frameBufferWidth = isLandscape ? 480 : 320; int frameBufferHeight = isLandscape ? 320 : 480; Bitmap frameBuffer = Bitmap.createBitmap(frameBufferWidth, frameBufferHeight, Config.RGB_565); float scaleX = (float) frameBufferWidth / getWindowManager().getDefaultDisplay().getWidth(); float scaleY = (float) frameBufferHeight / getWindowManager().getDefaultDisplay().getHeight(); renderView = new AndroidFastRenderView(this, frameBuffer); graphics = new AndroidGraphics(getAssets(), frameBuffer); fileIO = new AndroidFileIO(this); audio = new AndroidAudio(this); input = new AndroidInput(this, renderView, scaleX, scaleY); screen = getStartScreen(); setContentView(renderView); PowerManager powerManager = (PowerManager) getSystemService(Context.POWER_SERVICE); wakeLock = powerManager.newWakeLock(PowerManager.FULL_WAKE_LOCK, "GLGame"); } @Override public void onResume() { super.onResume(); wakeLock.acquire(); screen.resume(); renderView.resume(); } @Override public void onPause() { super.onPause(); wakeLock.release(); renderView.pause(); screen.pause(); if (isFinishing()) screen.dispose(); } public Input getInput() { return input; } public FileIO getFileIO() { return fileIO; } public Graphics getGraphics() { return graphics; } public Audio getAudio() { return audio; } public void setScreen(Screen screen) { if (screen == null) throw new IllegalArgumentException("Screen must not be null"); this.screen.pause(); this.screen.dispose(); screen.resume(); screen.update(0); this.screen = screen; } public Screen getCurrentScreen() { return screen; } }