教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 精品文档 > 建筑文档 >

Android手机游戏开发知识点总结

来源:网络收集 时间:2026-04-01
导读: Android手机游戏知识点总结 Android手机游戏开发学习笔记 第一部分 其实游戏就是让状态机不断的让Canvas在View上画你想要的东西。这个状态机包括内部的执行,还包括外部的输入。 Android开发的MVC模式 1,通过View和SurfaceView来显示界面的视图。(处理界面

Android手机游戏知识点总结

Android手机游戏开发学习笔记

第一部分 其实游戏就是让状态机不断的让Canvas在View上画你想要的东西。这个状态机包括内部的执行,还包括外部的输入。 Android开发的MVC模式

1,通过View和SurfaceView来显示界面的视图。(处理界面与用户的交互事件,如,触笔点击,用户按键等。可通过View类的onKeyDown,onKeyUp,onTouchEvent等)。 2,用Activity来控制游戏的整体结构。 3,设计一个逻辑类,用来处理逻辑运算。

Android中任何一个View类都只有重写onDraw方法来实现界面显示。 Android中提供了

onKeyUp,onKeyDown,onKeyMultiple,onKeyPreIme,onTouchEvent,onTrackballEvent等方法。可以用来处理游戏中的事件消息。所以继承View时,需要重载这些方法。

Android中提供了invalidate来刷新界面,但invalidate不能直接在线程中调用,违背单线程模型。

因此Android中最常用的方法是利用Handler来时更新UI界面。

第一部分 View 类

每个View类都有一个绘画的画布,在游戏中可以自定义视图View,任何一个View类都只需要重写onDraw方法来实现界面显示,可以是3D,也可以是文本。 游戏的核心就是不断的绘图和刷新,图我们可以通过onDraw方法绘制,刷新Android中可以用invalidate方法来刷新界面,注意:invalidate不能直接在线程中调用,因其违背了

违背单线程模型。因此Android中最常用的方法是利用Handler来时更新UI界面。下面这个例子中包含了两个刷新方法。

public class Game extends Activity{ public static final int REFRESH = 1; public GameView gameView;

public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState);

this.gameView = new GameView(this);//实例化GameView

setContentView(gameView);

new Thread(new GameThread()).start(); }

// Handler handler = new Handler(){//注释掉的为实例化Handler对象并重写handleMessage方法实现一个消息接受器,然后在线程中通过sendMessage方法发送更新界面的消息,

当接收器收到更新界面的消息时,便执行invalidate方法更新屏幕显示。 // public void handleMessage(Message msg){//接受消息 // switch (msg.what){ // case Game.REFRESH:

// gameView.invalidate();//更新界面 // break; // }

// super.handleMessage(msg); // } // };

public boolean onTouchEvent (MotionEvent event){ return true; }

public boolean onKeyDown(int keyCode,KeyEvent event){ return true; }

public boolean onKeyUp(int keyCode,KeyEvent event){ switch (keyCode){

case KeyEvent.KEYCODE_DPAD_DOWN: gameView.y+=6; break;

case KeyEvent.KEYCODE_DPAD_UP: gameView.y-=6; break; }

return true; }

public boolean onKeyMultiple(int keyCode,int repeatCount,KeyEvent event){ return true;

}

// public class GameThread implements Runnable{//创建更新线程 // @Override // public void run() {

// while(!Thread.currentThread().isInterrupted()){ // Message message = new Message(); // message.what = Game.REFRESH;

// Game.this.handler.sendMessage(message);//发送消息 // try{

// Thread.sleep(100);

// }catch(InterruptedException e){ // Thread.currentThread().interrupt(); // } // } // } // }

public class GameThread implements Runnable{ public void run(){

while(!Thread.currentThread().isInterrupted()){ try{

Thread.sleep(100);

}catch(InterruptedException e){ Thread.currentThread().interrupt(); }

gameView.postInvalidate();//使用PostInvalidate可以直接在线程中更新界面 不需要Handler来传递消息 } } } }

public class GameView extends View{ public int count = 0; public int y =0;

public GameView(Context context) { super(context); }

public void onDraw(Canvas canvas){ if(count<8){ count++; }else{ count=0; }

Paint paint= new Paint(); switch(count%4){ case 0:

paint.setColor(Color.BLACK); break; case 1:

paint.setColor(Color.RED); break; case 2:

paint.setColor(Color.YELLOW); break; case 3:

paint.setColor(Color.GREEN); break; }

canvas.drawRect(y,y,y+40,y+40, paint);//绘制矩形 } }

第二部分 SurfaceView类

1,开发复杂游戏,而且对程序的执行效率要求更高时用此类,因本身就是双缓冲机制的。

2,SurfaceView可以直接访问一个画布。

3,SurfaceView是提供给需要直接画像素而不是使用窗体部件的应用而使用的。 4,View即其子类(如TextVie,Button)要画在Surface上。每个Surface创建一个Canvas对象(属性时常改变)用来管理View在Surface上绘制操作。 5,使用SurfaceView绘图时,一般都是出现在最顶层。在使用时要对其创建,

销毁,情况改变进行监视,这就需要实现SurfaceHolder.Callback接口, 如果要对被绘制的画布进行裁剪,控制其大小时都需要使用SurfaceHolder来完成处理。

6,在程序中,SurfaceHolder对象需要通过getHolder方法来获得,同时还需要addCallback方法来添加“回调函数”。

7,SurfaceView与View不同之处,在于SurfaceView不需要通过线程来更新视图,在绘制前必须使用lockCanvas方法锁定画布,并得到画布,然后在画布上绘制

绘制完成后,使用unlockCanvasAndPost方法来解锁画布。 8,addCallback:给SurfaceView添加一个回调函数; removeCallback:从SurfaceView移除回调函数;

public class GameView2 extends SurfaceView implements SurfaceHolder.Callback, Runnable{

SurfaceHolder surfaceHolder = null;//定义对象 public boolean loop = false; public int count = 1;

public GameView2(Context context) { super(context);

surfaceHolder = this.getHolder();//实例化SurfaceHolder对象 surfaceHolder.addCallback(this);//添加回调函数 loop = true;

this.setFocusable(true);//不知道这句什么意思? }

private void Draw() {

Canvas canvas = surfaceHolder.lockCanvas();//锁定画布 if(surfaceHolder ==null||canvas ==null){ return ; }

if(count<100){ count++; }else{ count= 0; }

Paint paint = new Paint();//创建画笔 paint.setAntiAlias(true);//设置抗锯齿

…… 此处隐藏:2250字,全部文档内容请下载后查看。喜欢就下载吧 ……
Android手机游戏开发知识点总结.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wendang/438798.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)