android游戏绘制屏幕

android游戏绘制屏幕
发表于:2011-03-28 13:35:37 作者:guozhao 浏览次数:202 字号:T|T


用几天的时间我研究了一下android的框架,android是这么样开发2D游戏的。
我们先来讲GameCanvas(游戏画布) 。这是一个类,你可以这样理解它-----我们游戏的画布。开发游戏的时候大部分的工作都会在这里面完成的 。那么在android 里面 怎样构成我们的GameCanvas。这里我用了
SurfaceView 类,使用这个类的原因是它比较适合游戏画布。然后我们再继承SurfaceHolder.Callback 这个接口


这样我们的GameCanvas类要实现其几个方法:
  1. public void surfaceCreated(SurfaceHolder holder) {}
  2. public void surfaceDestroyed(SurfaceHolder holder) {}
  3. public void surfaceChanged(SurfaceHolder holder, int format, int width,
 int height) {}

我们在surfaceCreated 方法里面初始化游戏,在surfaceChanged 处理一下当手机碰到外界情况的事件,
surfaceDestroyed 方法里面我们写释放资源等。
这样每个方法里面都会有个参数 SurfaceHolder 这个是什么呢??暂且先不讨论它,后面你会明白他有什么用了,
声明一个SurfaceHolder handle对象,然后在surfaceCreated()方法里面初始化它 如下:handle = this.getHolder();
handle.addCallback(this);
那在哪里绘制我们的游戏画布呢?讲到关键的地方了,这里我们重载view 的 public void draw(Canvas canvas){}方法,
我们就在这个方法里面绘制我们的游戏。

01public class GameCanvas extends SurfaceView implements SurfaceHolder.Callback
02{
03private SurfaceHolder handle = null;
04 
05private int width = 0;
06 
07private int height = 0;
08 
09public GameCanvas(){
10 
11handle = this.getHolder();
12handle.addCallback(this);
13 
14}
15 
16public void initGame(){
17 
18width = this.getWidth();
19height = this.getHeight();
20{
21 
22public void gameLogic(){
23 
24 
25}
26 
27public void gameInput(){
28 
29}
30 
31@Override
32public void draw(Canvas canvas){
33 
34Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
35paint.setColor(Colcor.Black);
36 
37canvas.drawRect(new Rect(int startX,int StartY,int endX,int endY));//此处的Rect跟java里面的有点区别
38//,不过差不多 自己写坐标就行 0,0,320,440
39 
40//上面的语句是将屏幕绘制成黑色
41 
42paint.setColor(Cloor.red);
43canvas.drawText("Andoid GameCanvas",100,100,paint);
44 
45//
46}
47 
48//
49@Override
50public void surfaceCreated(SurfaceHolder holder) {
51 
52this. initGame();
53new Thread(this){
54public void run(){
55 
56while(true)
57{
58long start=System.currentTimeMillis();
59Canvas canvas = GameCanvas.this.handle.lockCanvas(null);
60//logic
61this.draw(canvas);
62canvas.save();
63//input()
64GameCanvas.this.handle.unlockCanvasAndPost(canvas);
65long end=System.currentTimeMillis();
66if(100>end-start){
67try{Thread.sleep(100-(end-start));}catch(Exception e){}
68}
69}
70}
71}.start();
72 
73}
74@Override
75public void surfaceDestroyed(SurfaceHolder holder) {
76 
77}
78@Override
79public void surfaceChanged(SurfaceHolder holder, int format, int width,int height){
80 
81}
82 
83}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值