Android游戏开发教程——(绘制屏幕)「建议收藏」

游戏开发的基本原理:启动一个Activity对象,然后让其显示一个GameCanvas对象(setContentView(GameCanvas));,GameCanvas 里面做游戏逻辑,用户键盘或屏幕输入,屏幕的绘制等这些工作。 那具体怎么做呢?说到重点了。先来讲GameCanvas(游戏画布) 。这是一个类,也就是我们游戏的画布。开发游戏的时候大部分

大家好,又见面了,我是全栈君。

游戏开发的基本原理:

启动一个Activity对象,然后让其显示一个GameCanvas对象(setContentView(GameCanvas));,

GameCanvas 里面做游戏逻辑,用户键盘或屏幕输入,屏幕的绘制等这些工作。 那具体怎么做呢?说到重点了。

先来讲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){}方法,

我们就在这个方法里面绘制我们的游戏。

游戏大体框架如下:

public class GameCanvas extends SurfaceView implements SurfaceHolder.Callback{ private SurfaceHolder handle = null; private int width = 0; private int height = 0; public GameCanvas(){  handle = this.getHolder();  handle.addCallback(this); } public void initGame(){  width = this.getWidth();  height = this.getHeight(); } public void gameLogic(){} public void gameInput(){} @Override public void draw(Canvas canvas){  Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);  paint.setColor(Colcor.Black);  canvas.drawRect(new Rect(int startX,int StartY,int endX,int endY));//此处的Rect跟java里面的有点区别,自己写坐标就行,上面的语句是将屏幕绘制成黑色  paint.setColor(Cloor.red);  canvas.drawText("Andoid GameCanvas",100,100,paint); } @Override public void surfaceCreated(SurfaceHolder holder) {  this.initGame();  new Thread(this){   public void run(){    while(true) {     long start=System.currentTimeMillis();     Canvas canvas = GameCanvas.this.handle.lockCanvas(null);     this.draw(canvas);     canvas.save();     GameCanvas.this.handle.unlockCanvasAndPost(canvas);    }   }.start();} long end=System.currentTimeMillis(); if(100>end-start){  try{   Thread.sleep(100-(end-start));  }catch(Exception e){  } } @Override public void surfaceDestroyed(SurfaceHolder holder) { } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width,int height){} }

好了,游戏框架已经打好了。当你运行一下程序,你会看到手机屏幕被绘制成了黑色,在坐标(100,100)处显示文本:Andoid GameCanvas

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/121485.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • from django.db import models_django请求响应流程图

    from django.db import models_django请求响应流程图前言APIView中的dispatch是整个请求生命过程的核心方法,包含了请求模块,权限验证,异常模块和响应模块,我们先来介绍请求模块请求模块:request对象源码入口APIView类中di

  • 添加网页背景音乐的两种方法是什么_html怎么添加背景音乐

    添加网页背景音乐的两种方法是什么_html怎么添加背景音乐为网页添加背景音乐的方法一般有两种,第一种是通过普通的标签来添加,另一种是通过标签来添加 1.其中,loop=”-1″表示音乐无限循环播放,如果你要设置播放次数,则改为相应的数字即可2.。 第一种方法当页面打开时音乐播放,如果将页面最小化以后播放音乐会自动暂停,第二种方法则不会出现这种情况,只要不将窗口关闭,它会一直播放 ■  :    是用以插入背景音

  • 一千行 MySQL 学习笔记

    一千行 MySQL 学习笔记

    2021年10月25日
  • 手动清除fun.xls.exe病毒的方法[通俗易懂]

    手动清除fun.xls.exe病毒的方法[通俗易懂](无法显示隐藏文件以及无法双击打开分区)用杀毒软件杀毒,所有驱动盘上的文件夹表现为不可见,实际为文件夹隐藏了。如何判断是中了该种病毒,可以通过在命令行下键入:cdC:’dir/ah如果有fun.x

  • modelsim安装_Modelsim10.5安装教程

    modelsim安装_Modelsim10.5安装教程1.鼠标右击软件压缩包,选择“解压到modelsim-win64-10.5”。2.打开解压后的文件夹,鼠标右击“modelsim-win64-10.5”,选择“以管理员身份运行”。3.点击“下一步”。4.点击“浏览”选择软件的安装路径(建议安装在C盘以外的其他磁盘,且安装路径不要有中文),点击“下一步”。…

  • 用几何光学方法如何分析反射调制方式光纤位移_相位单点激光测距

    用几何光学方法如何分析反射调制方式光纤位移_相位单点激光测距本文介绍了移相干涉技术中最基础却也非常重要的一步——相位提取,主要阐述了移相干涉测量原理、四步移相法提取相位、多步平均法推导过程、多步解包裹后平均法这四个部分,希望能给同样从事该领域研究的你带来一点帮助。

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号