Music Nekkid

Save Handlingsuperheroine Manage Include Fckeditor Editor Filemanager Connectors Asp Connector Asp Cams Nekkid Android 2D游戏引擎1 - 日志 - 闫涛 - 创业吧

Save Handlingsuperheroine Manage Include Fckeditor Editor Filemanager Connectors Asp Connector Asp Cams Nekkid

欢迎您
登录 | 注册

登录站点

用户名/Email

密码


闫涛的日志

闫涛的主页 » TA的所有日志 » 查看日志

Android 2D游戏引擎1

3已有 2304 次阅读  2010-07-31 11:57   标签Android 
  1. 前言

Android游戏在App Market上是最火的一类应用,但是和iPhone游戏相比,Android游戏还有很大差距,除了与Android手机的市场占有率不高有关以外,Android游戏开发的资料较少也是制约因素之一。本系列教程将从实现Android SDK带的lunarLander游戏的实现为主轴,实现一个完整的Android游戏引擎。当然这个游戏引擎没有使用OpenGL ES 2.0中的功能,也不能处理3D游戏,但是对于一个小型Android游戏开发应该已经足够了。

在本集中,我将介绍Android中的图像绘制技术,这个是Android游戏的基础。

  • 游戏视图

首先需要设计游戏的显示界面类A2dGameView(由于我们要实现一个完整的Android游戏引擎,A2d前缀代表使用Android本身图形类的游戏引擎,Egl2d是OpenGL ES 2D游戏引擎,Egl3d是OpenGL ES 3D游戏引擎),具体代码如下所示:

package com.bjcic.fage.a2d;

import com.bjcic.fage.game.R;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.view.SurfaceHolder;
import android.view.SurfaceView;

public class A2dGameView extends SurfaceView implements SurfaceHolder.Callback {}
 
 @Override
 public void onDraw(Canvas canvas) {}

 @Override
 public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {}

 @Override
 public void surfaceCreated(SurfaceHolder arg0) {}

 @Override
 public void surfaceDestroyed(SurfaceHolder arg0) {} catch (InterruptedException e) {}
  }
 }

 private A2dRenderThd renderThd = null;
 private Thread renderThdWrapper = null;
}
其中需要指出的该类的onDraw函数,该函数在屏幕(10,10)坐标出绘制一个bmp图片。

在public void surfaceCreated(SurfaceHolder arg0) 函数中,初始化并启动界面渲染类,界面渲染类启动界面渲染线程,完成界面的绘制工作。

在surfaceDestroyed(SurfaceHolder arg0)函数中停止界面渲染线程。

  • 渲染线程

package com.bjcic.fage.a2d;

import android.graphics.Canvas;
import android.view.SurfaceHolder;

public class A2dRenderThd implements Runnable {}

 @Override
 public void run() {}
   } finally {}
   }
  }
 }
 
 public void setIsRunning(boolean isRunning) {}

 private SurfaceHolder surfHolder = null;
 private A2dGameView gameView = null;
 private boolean isRunning = true;
}
由上面代码可以看出,渲染线程是一个无形循环,每次循环中调用GameView来实现界面的绘制。

最后是在启动类中加载游戏视图,代码如下所示:

@Override
    public void onCreate(Bundle savedInstanceState) {}

  • 总结

在本集中,我描述了游戏视图的绘制方法,以及游戏主循环的雏形。

收藏 举报

发表评论 评论 (0 个评论)

涂鸦板

全部 作者的其他最新日志

热门日志导读


关于创业邦 | 顾问委员会 | 联系我们 | 友情合作 | 版权声明 | 诚聘英才 | 杂志订阅

Copyright 2007-2010 cyzone.cn All rights reserved