位置: 编程技术 - 正文

Android游戏快速入门(二):绘制动态文字和图片(安卓十游戏怎么玩)

编辑:rootadmin
一、概述

推荐整理分享Android游戏快速入门(二):绘制动态文字和图片(安卓十游戏怎么玩),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:androidgames,安卓的游戏进度怎么移到苹果,安卓十游戏怎么玩,安卓加快游戏速度,安卓游戏教程,android的游戏怎么点出来,android系统游戏,android系统游戏,内容如对您有帮助,希望把文章链接给更多的朋友!

这一讲我将带着大家来实现文字和图片的绘制,然后试着让文字和图片在屏幕里动起来。虽然,离真正的游戏还有一段距离,但是,这些都是游戏的基础,所以,大家都是需要掌握的。好的,不多说了,一起进入正题吧!

完成这一讲的任务,我们需要掌握如下一些概念,然后我会分别进行讲解。

层的概念 文字层 贴图层View对象:自定义显示控件 onDraw()方法:执行一系列绘制Canvas对象:画布,呈现数据 Paint:画笔对象 drawText:绘制文字 drawBitmap:绘制贴图SurfaceView对象 SurfaceHolder.CallbackThread:线程让画面动起来二、层的概念

学习photoshop的朋友肯定都知道层的概念,用通俗的话来说,层就是一个透明的玻璃纸。在android游戏中层的概念跟photoshop中也很相&#;,它可以用来呈现文字、图片等元素。游戏中一般都会有很多层组成,每个层中会有不同的元素,而且每个层中的元素是独立可控的。比如:在打飞机游戏中,背景是一层,玩家飞机是一层,敌机也是一层。大家要注意:层是有层次关系的,上面层会覆盖下面的层。那么,在打飞机游戏中,背景肯定是最里面一层,其他任何游戏元素都呈现在背景的上面。

另外有一点要跟大家特别讲一下,就是关于图片素材问题,我们都知道图片都是正规的矩形,而且有背景,所以在场景中肯定会有颜色块,看起来很不&#;真。但是PNG&#;式的图片是可以做成透明背景,这样就解决这个问题,这也就是为什么android的图片素材基本上都是PNG&#;式的原因。

文字层:显示文字内容的层

贴图层:显示图片元素的层

但是,常常文字层和贴图层分的不是很清楚,文字层也可以绘制贴图,贴图层也可以绘制文字。

三、View对象

在普通的应用开发中&#;乎很难直接接触到View类,但实际上几乎所有的Android显示组件都是继承View类,TextView, EidtView, ImageView等等都是继承View类。开发中我们常常在XML文件中使用这些组件,但是如果要让组件具有更多独特的功能就需要自定义View类来扩展我们的需求了。

在Android游戏当中充当主要的除了控制类外就是显示类,在J2ME中我们用Display和Canvas来实现这些,而在Android中涉及到显示的为View类,Android游戏开发中比较重要和复杂的就是显示和游戏逻辑的处理。那么,我们首先研究显示的问题。

首先创建一个游戏主战场:GameView 类,并继承View类,结构如下:

接下来我们要将上面创建的GameView类显示到手机屏幕上。需要在入口Activity中进行调用。项目创建的时候我就已经设定了一个主Activity,名称为:GameStartActivity,代码结构如下:

运行Application,效果如下:

很遗憾,页面中除了title什么也看不到。实际上,我只是测试自定义View是否能够正确显示,只要程序没有bug,就算是成功。(请看代码中的注释)

好的,接下来我们就在View里面展现一些内容,这个时候就要用到View对象中的onDraw方法,在自定义的GameView对象中必须覆盖父类View中的onDraw方法。接下来,你想展现任何内容都可以在此方法中进行了。假如,我想在屏幕的(,)处绘制蓝色文字:“飞机大战”,在屏幕的(,)处绘制一个半径像素的红色圆。

运行效果如下图:

到目前为止,你已经可以在自定义的GameView中绘制文字和各种图形了,但游戏中都是大量的图片素材,对于图片如何绘制呢?也很简单,Canvas类也提供了相应的drawBitmap方法。现在,我来绘制屏幕的(,)处绘制一个飞机图片。只需要在ondraw方法中添加如下代码即可:

运行效果如下图:

对于代码中还有Canvas和Paint两个类没有细讲,我们可以这样打个比方吧,假如Canvas是一个画家,那么Paint就是画家手中的笔。画家能够画出各种景象(文字,形状,贴图等等),就要用到不同的画笔和不同的颜色。通过画笔类Paint就可以调整颜色,字体样式,字体大小等等。

我们发现绘制贴图canvas.drawBitmap(heroBitmap, , , paint);也会用到paint对象,但实际上paint起到的作用不大,我们完全可以忽略。

这种写法也是对的:canvas.drawBitmap(heroBitmap, , , null);

具体的用法代码里面已经有了,我就不再多说了,大家可以亲自查询下Android SDK API。

四、Thread:让画面动起来

上面我们已经实现了自定义的View中绘制了文字、形状和贴图,但是一切都是静止的,跟游戏还差的很远,意义不是很大。那么,接下来我就带着大家一起来让画面动起来。

实现这个目标,我们需要用到一个在游戏开发中非常重要的机制,就是多线程机制。具体多线程实现方式,不是我们现在讨论的问题,如果还不是很明白就需要自己补补线程方面的知识了。

在这里我们采用GameView类直接实现Runnable接口的方式:

Android游戏快速入门(二):绘制动态文字和图片(安卓十游戏怎么玩)

默认必须实现run方法:

postInvalidate() :此方法是View类中的方法,功能是触发调用onDraw方法实现界面重绘。

只要在每次重绘之前对层中对象的位置、形状、颜色或者透明度进行修改, 而且在一秒钟之内完成几十次的重绘,人的&#;睛根本无法分辨,所以流畅的动画效果就产生了。动画片和电影也是这个原理。

现在我想让上面场景中的小球每隔0.5秒钟改变一次透明度和颜色,飞机垂直向上飞行dp,效果如下:

完整的代码如下:

到此,实际上我们已经完成了我们的任务,但是并没有考虑到系统运行效率等问题。下面我将带着大家学习一下高效且更适合做游戏开发的SurfaceView类。

五、SurfaceView对象

Surfaceview类是View类的一个子类,我们来看看API的层级关系:

1、SurfaceView的特点

可以在主线程之外的线程中向屏幕绘图上。这样可以避免画图任务繁重的时候造成主线程阻塞,从而提高了程序的反应速度

2、实现方式

定义一个游戏场景类继承SurefaceView ,同事实现SurfaceHolder.Callback接口。因为使用SurfaceView有一个原则,所有的绘图工作必须在Surface 被创建之后才能开始(Surface这个概念在 图形编程中常常被提到,基本上我们可以把它当作显存的一个映射,写入到Surface 的内容可以被直接复制到显存从而显示出来,这使得显示速度会非常快),而在Surface 被销毁之前必须结束。所以Callback 中的surfaceCreated 和surfaceDestroyed 就成了绘图处理代码的边界。

3、需要重写的几个方法:

//在surface的大小发生改变时激发

1) public void surfaceChanged(SurfaceHolder holder,int format,int width,int height){}

//在创建时激发,一般在这里调用画图的线程。

2) public void surfaceCreated(SurfaceHolder holder){}

//销毁时激发,一般在这里将画图的线程停止、释放。

3) public void surfaceDestroyed(SurfaceHolder holder) {}

4、整个代码过程逻辑:

-->继承SurfaceView并实现SurfaceHolder.Callback接口

--> SurfaceView.getHolder()获得SurfaceHolder对象

-->SurfaceHolder.addCallback(callback) 添加回调函数

-->SurfaceHolder.lockCanvas()获得Canvas对象并锁定画布

--> Canvas绘画

-->SurfaceHolder.unlockCanvasAndPost(Canvas canvas)结束锁定,并提交改变,将图形显示。

5、SurfaceHolder

这里用到了一个类SurfaceHolder,可以把它当成surface的控制器,用来操纵surface。处理Canvas上的效果和动画,控制表面,大小,像素等。几个需要注意的方法:

// 给SurfaceView当前的持有者一个回调对象。1) abstract void addCallback(SurfaceHolder.Callback callback);

// 锁定画布,一般在锁定后就可以通过其返回的画布对象Canvas,在其上面画图等操作了。2) abstract Canvas lockCanvas();// 锁定画布的某个区域进行画图等,因为画完图后,会调用下面的unlockCanvasAndPost来改变显示内容。// 相对部分内存要求比较高的游戏来说,可以不用重画dirty外的其它区域的像素,可以提高速度。

3) abstract Canvas lockCanvas(Rect dirty);

// 结束锁定画图,并提交改变。4) abstract void unlockCanvasAndPost(Canvas canvas);

6、我们把上面View的实现功能改为SurfaceView来重新实现

大家发现,飞机移动到顶部之后就不见了,请大家思考,如何让飞机飞过顶部之后还能从底部出来呢?

下一讲,我将带着大家实现更炫的游戏效果,敬请期待吧?

源码下载:

CSDN:

android游戏开发——微信打飞机(二) 在上一篇的文章中,介绍了游戏中的一些对象类,接下来讲它们具体的实现。以下是程序代码的下载地址:

个经典Android游戏源码下载地址(持续更新~) 给大家推荐几个,我调试过的Android游戏源码吧!每个我都运行了效果不错哦!希望对喜爱Android开发的朋友们有所帮助。希望大家喜欢。1.塔防类游戏源

Android中的坐标系统 1、Android中的坐标系统在Android系统中,屏幕的左上角是坐标系统的原点(0,0)坐标。原点向右延伸是X轴正方向,原点向下延伸是Y轴正方向。2、屏幕的

标签: 安卓十游戏怎么玩

本文链接地址:https://www.jiuchutong.com/biancheng/371174.html 转载请保留说明!

上一篇:Android游戏快速入门(一):基础储备(安卓十游戏怎么玩)

下一篇:android游戏开发——微信打飞机(二)(Android游戏开发书籍)

  • 小规模纳税人征税率为多少
  • 税金及附加包括印花税吗
  • 发票签字有什么用
  • 非生产性费用不应计入产品成本
  • 建筑工地加油计入什么科目
  • 微信怎么开公司账户
  • 租赁房屋增值税
  • 计算本月应交增值税转账公式
  • 银行代扣出口快递费用
  • 公司章程上的出资时间2050年
  • 如何确认增值税纳税义务发生时间
  • 耕地占用税如何申报缴纳
  • 发票复印件能报账吗
  • 我公司开给对方13个点发票,后期我公司怎么抵税
  • 增值税专用发票电子版
  • 航天信息300元是什么费用
  • 营改增的重点是什么
  • 自来水企业应该交什么税
  • 应交税费包括了增值税吗
  • 个税系统数据没有备份怎么办
  • 减少注册资本金程序
  • 投资性房地产其他综合收益递延所得税
  • 售后维修服务会计入账方式
  • 金银首饰零售消费税税收优惠
  • 个人所得税更正申报有滞纳金吗
  • 季度不超过30万免税分录
  • 利润调整分录
  • 企业销售费用支出怎么算
  • 包装本公司产品的出口包装物是否缴增值税?
  • 跨年的工会经费怎么做分录
  • 如何打印word文档手机上
  • 公司向银行贷款利息是多少
  • 如何更改windows用户名
  • 分公司是小微企业总公司是一般纳税人,如何做合并报表
  • php fork
  • 认缴制没有实资本会怎么样
  • rtlrack.exe - rtlrack是什么进程 有什么用
  • 异地存放货物的规定
  • 公司交会费有什么用
  • PHP:ftp_ssl_connect()的用法_FTP函数
  • 提供应税服务的纳税义务发生时间
  • 2015年4月4日摄于Tear Drop Arch附近的月全食,犹他州纪念碑谷 (© Alan Dyer/Alamy)
  • google谷歌浏览器下载电脑版
  • 社保挂靠公司收费标准是怎样的
  • 猿类作文
  • 魔改6.67
  • 业务招待费包括哪些内容和费用
  • 社会团体不属于财政拨款的对象
  • linux mongodb基本操作
  • 二手车交易规则最新
  • 小规模不动产租赁要交哪些税
  • 公司为员工报销怎么做账
  • 新准则对企业的影响
  • 农业种植账务处理方法
  • 政府发的奖金需要交个税吗
  • 收到先征后返的增值税计入哪里
  • 电子缴税付款凭证是什么结算方式
  • 公司注册取消验资
  • 请演员的费用账务处理
  • sqlserver bulkcopy
  • 复制糸统
  • win10系统d盘变成e盘,进入winpe盘符正常
  • 在Mac OS Yosemite 系统中如何发送超大邮件附件
  • Win10中SmartScreen无法设置需要系统管理员身份该怎么办?
  • mac入门视频教程
  • win7怎么查是不是正版
  • win10开始菜单样式
  • win7无法打开任何软件程序
  • 使用androidx 找不到v7
  • intent传递数据的方法
  • linux保存
  • Python中http请求方法库汇总
  • unity的shader用法
  • 施工费税费
  • 全国税务发票查询电话
  • 投资性房地产如何合并抵消
  • 国家税务总局发票查询官网
  • 无锡市国税
  • 威海个人社保余额查询
  • 税务转为非正常户的后果
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设