`

《Beginning Android Games》给出基本框架的实现(1)

阅读更多

实现的部分代码比较多 所以分成几个部分 首先从最主题的Game实现来看

public abstract class AndroidGame extends Activity implements Game {
	AndroidFastRenderView renderView;
	Graphics graphics;
	Audio audio;
	Input input;
	FileIO fileIO;
	Screen screen;
	WakeLock wakeLock;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		
		requestWindowFeature(Window.FEATURE_NO_TITLE);
		getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
		
		boolean isLandspace=getResources().getConfiguration().orientation==Configuration.ORIENTATION_LANDSCAPE;
		int frameBufferWidth=isLandspace?480:320;
		int frameBufferHeight=isLandspace?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(getAssets());
		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
	protected void onResume() {
		super.onResume();
		wakeLock.acquire();
		screen.resume();
		renderView.resume();
	}

	@Override
	protected void onPause() {
		super.onPause();
		wakeLock.release();
		renderView.pause();
		screen.pause();
		
		if(isFinishing()){
			screen.dispose();
		}
	}

	@Override
	public Audio getAudio() {
		return audio;
	}

	@Override
	public Screen getCurrentScreen() {
		return screen;
	}

	@Override
	public FileIO getFileIO() {
		return fileIO;
	}

	@Override
	public Graphics getGraphics() {
		return graphics;
	}

	@Override
	public Input getInput() {
		return input;
	}

	@Override
	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;
	}

}

 所有的实现都采用了AndroidXXX这样的名字 而AndroidGame是Game的实现 从代码中 也可以看到AndroidInput,AndroidAudio等 在后面会一一给出具体实现

 

在AndroidGame中有两个之前没有见到的类 一个是AndroidFastRenderView 另一个是WakeLock,WakeLock是Android系统自带的类,用于控制屏幕唤醒的锁,并不属于游戏框架,而AndroidFastRenderView则是非常重要的一个类了,之前所说的游戏主循环,其实也是在这个类中得到的体现,下面是AndroidFastRenderView的实现

public class AndroidFastRenderView extends SurfaceView implements Runnable{
	AndroidGame game;
	Bitmap framebuffer;
	Thread renderThread=null;
	SurfaceHolder holder;
	volatile boolean running=false;
	
	public AndroidFastRenderView(AndroidGame game, Bitmap framebuffer){
		super(game);
		this.game=game;
		this.framebuffer=framebuffer;
		this.holder=getHolder();
	}
	
	public void resume(){
		running=true;
		renderThread=new Thread(this);
		renderThread.start();
	}
	
	public void pause(){
		running=false;
		while(true){
			try{
				renderThread.join();
				break;
			} catch(InterruptedException e){
				//retry
			}
		}
	}
	
	@Override
	public void run() {
		Rect dstRect=new Rect();
		long startTime=System.nanoTime();
		while(running){
			if(!holder.getSurface().isValid()){
				continue;
			}
			float deltaTime=(System.nanoTime()-startTime)/1000000000.0f;
			startTime=System.nanoTime();
			
			game.getCurrentScreen().update(deltaTime);
			game.getCurrentScreen().present(deltaTime);
			
			Canvas canvas=holder.lockCanvas();
			canvas.getClipBounds(dstRect);
			canvas.drawBitmap(framebuffer, null, dstRect, null);
			holder.unlockCanvasAndPost(canvas);
		}
	}

}

 Game中具体Input Audio等的实现会在后面给出

分享到:
评论
1 楼 binlovexuelu 2012-02-24  
顶!!!!!!!!!!!!

相关推荐

    Beginning Android Games.pdf

    Beginning Android Games.pdf

    Beginning Android Games 3rd Edition.pdf

    Beginning Android Games, Third Edition gives you everything you need to branch out and write your own Android games for a variety of hardware. Do you have an awesome idea for the next break-through ...

    Beginning Android Games

    "Beginning Android Games, Second Edition offers everything you need to join the ranks of successful Android game developers, including Android tablet game app development considerations. You'll start...

    Beginning Android Games 3rd Edition

    Android. While some of the material may be old news for you, there are still a lot of tips and hints contained here that should make reading this book worthwhile. Android is a strange beast at times, ...

    Beginning Android Games - Mario Zechner

    你会开始与游戏设计基础和编程的基础,然后逐步实现建立自己的基本的游戏引擎和游戏可玩。这会给你一切你需要另辟蹊径,写自己的Andr​​oid游戏。 潜在的用户群和现有的高性能装置,使机器人的广泛有志游戏开发商...

    Beginning Android Games 2012

    Beginning Android Games 2012 (新版)

    Beginning Android Games [3rd Edition,2016]

    Beginning Android Games English | 6 Jan. 2017 | ISBN: 1484204735 | 636 Pages | PDF | 11.87 MB Learn all of the basics needed to join the ranks of successful Android game developers. You'll start with...

    Beginning Android Games, 2nd Edition

    Beginning Android Games, 2nd Edition

    Beginning Android Games(Apress,3ed,2015)

    Beginning Android Games, Third Edition gives you everything you need to branch out and write your own Android games for a variety of hardware. Do you have an awesome idea for the next break-through ...

    beginning android games

    beginning android games

    android.开发书籍 高清PDF Beginning Android Games

    android.开发书籍 高清PDF Beginning Android Games

    Beginning Android Games(3rd) 无水印pdf 0分

    Beginning Android Games(3rd) 英文无水印pdf 第3版 pdf使用FoxitReader和PDF-XChangeViewer测试可以打开

    Beginning Android Games 1

    * Android平台的基础,适用于那些在游戏中基本面 * 2D和3D游戏的设计和他们在Android平台上的成功实施 你将学到什么 *如何开发你的第一个Android应用程序的设置和使用的开发工具 *在Android平台中的游戏编程的基础...

    Beginning Android 4 Games Development

    Beginning Android 4 Games Development offers everything you need to join the ranks of successful Android game developers. You'll start with game design fundamentals and programming basics, and then ...

    Beginning Android Games( Android 游戏开发入门)

    你会开始与游戏设计基础和编程的基础,然后逐步实现建立自己的基本的游戏引擎和游戏可玩。这会给你一切你需要另辟蹊径,写自己的Android游戏。 这本书将指导制作为Android平台的几个示例游戏的过程,并涉及广泛的...

    Beginning Android

    Beginning Android Beginning Android Beginning Android

    Beginning Android Games 2

    * Android平台的基础,适用于那些在游戏中基本面 * 2D和3D游戏的设计和他们在Android平台上的成功实施 你将学到什么 *如何开发你的第一个Android应用程序的设置和使用的开发工具 *在Android平台中的游戏编程的基础...

    Android 4 游戏开发入门(Beginning Android 4 Games Development)

    Beginning Android 4 Games Development offers everything you need to join the ranks of successful Android game developers. You'll start with game design fundamentals and programming basics, and then ...

Global site tag (gtag.js) - Google Analytics