实现的部分代码比较多 所以分成几个部分 首先从最主题的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等的实现会在后面给出
分享到:
相关推荐
《Beginning Android Games》一书由Mario Zechner撰写,旨在为初学者提供全面的Android游戏开发指南。本书从Android平台的基础知识入手,逐步深入到游戏开发的各个环节,涵盖了从简单的2D游戏到复杂的3D游戏的开发...
《Beginning Android Games 2012》这本书是一本关于Android游戏开发的专业教程书籍,由Mario Zechner和Robert Green共同撰写。该书以Android智能手机和平板电脑的游戏应用程序开发为主题,针对的是那些对Android游戏...
《Beginning Android Games, 2nd Edition》是一本深入浅出的Android游戏开发指南,由Mario Zechner与Robert Green合著。本书旨在帮助读者构建针对Android智能手机和平板电脑的游戏应用程序,涵盖了从基础知识到高级...
- **书籍名称**:《Beginning Android Games》(Android游戏开发入门) - **作者**:Mario Zechner - **出版信息**:Apress出版社,2011年4月10日发行 - **ISBN**:1430230428 - **资源格式**:PDF - **语言**:英文...
### Apress.Beginning Android Games.2011 #### 知识点概览 - **Android游戏开发基础知识** - **Android SDK入门** - **游戏开发基础理论** - **OpenGL ES图形编程** - **2D与3D游戏编程技巧** - **Android游戏开发...
《Beginning Android Games, 第二版》是一本专注于Android游戏开发的权威图书,由Mario Zechner和Robert Green共同撰写。本书旨在为读者提供一个全面的游戏开发入门教程,涵盖了从基础的游戏设计概念到高级的编程...
### 关于《Beginning Android Games》的关键知识点 #### 一、书籍概述 本书是一本非常出色的Android游戏开发入门书籍,由Mario Zechner撰写。作者在书中深入浅出地介绍了从2D到3D游戏开发的基本原理和技术细节。...
- **书名**:《Beginning Android 4 Games Development》 - **作者**: Mario Zechner 和 Robert Green - **出版社**: Apress Media, L.L.C. - **出版日期**: 2011年 - **ISBN**: - 纸质版: 978-1-4302-3987-1 - ...
### 关于《Beginner Android Games》的知识点梳理 #### 一、引言与目标受众 - **书籍定位**:本书面向初学者,旨在教授如何在Android平台上开发游戏应用。 - **主要内容**:涵盖Android基础知识、音频及图形编程、...
### Android游戏开发基础:《Beginning.Android.Games》关键知识点概览 #### 一、书籍简介与目标受众 《Beginning.Android.Games》是一本专为初学者设计的经典Android游戏开发教程。作者Mario Zechner通过本书带领...
1. **Android SDK与Eclipse集成**:Android SDK是开发Android应用的基础,包括了工具、库和API文档。Eclipse是一款流行的集成开发环境(IDE),用于编写、调试和优化代码。学习如何配置和使用它们是开始Android开发...
《Apress.Beginning.Android.Games》是一本专为Android游戏开发者设计的详尽指南,由Mario Zechner撰写。本书不仅介绍了Android平台的基础知识,还深入探讨了游戏开发的各个方面,包括音频、图形编程、数学、物理...
1. **Android平台简介** - Android操作系统的发展历程及其特点。 - 针对Android 1.5至4.0版本设备的游戏开发策略。 2. **开发环境搭建** - Android SDK安装与配置。 - Eclipse集成开发环境的使用。 - 创建...
安卓游戏框架android 游戏框架,基于kilobolt.com 上的教程,该教程本身基于《Beginning Android Games Development》(由Mario Zechner 和Robert Green 编写)。 目前,我直接基于教程进行此操作,但很快就会开始...
《Apress Beginning Android 4 Games Development 2011》是一本专为初学者设计的Android游戏开发指南,旨在帮助读者掌握使用Android平台创建游戏所需的技术和知识。这本书的出版年份是2011年,尽管Android系统已经...
- **"Beginning.Android.4.Games.Development.Dec.2011"**:该标题表明本书旨在为初学者提供Android 4游戏开发的基础知识。发布于2011年12月,反映了当时Android平台的发展状况及游戏开发的技术背景。 #### 描述...
开发者在创建这款游戏的过程中,参照了Mario Zechner所著的《 Beginning Android Games》这本书,这是一本非常权威且深入浅出的Android游戏开发指南,对于初学者和有经验的开发者来说都是宝贵的资源。 首先,让我们...