- 浏览: 116433 次
- 性别:
- 来自: 广州
文章分类
最新评论
游戏中最常见的元素就是图片了,想让一个游戏中的角色看起来更生动,单靠简单的移动和旋转图片是远远不够的,我们应该为角色添加动画,“动起来”的角色看起来既生动又贴近现实,具有更好的用户体验。那么动画在游戏中是如何实现的呢?
我们拿当今红的发紫的【捕鱼达人】这个游戏来说明。
如果我们有这样一张图片,想让这只鲨鱼动起来是很简单的一件事情,我们只需要将这张图片再每帧绘制的时候改变坐标就可以了。
代码片段如下:
…
matrix.setTranslate(x,y);
canvas.drawBitmap(fish.getImg(),matrix,paint);
x--;
…
我们在一个循环中,一直改变变换矩阵的坐标,将x向左平移,这样在每次绘制鲨鱼的时候,看起来就可以游动了。
但是。这样的效果是不是很傻?为什么呢?一眼就能看出来,因为鱼没有动作嘛!看起来像是一条死鱼在顺流飘动而已。这样的用户体验是糟糕的。那么我们怎么解决这个问题呢?很简单,因为我们可以使用多张图片来完成这个。我们再绘制的过程中,一直变换鲨鱼的图片,这样就能使鲨鱼看起来更生动了。
我们先来准备一组图片~
图片就不一一举例了,当我们有了这样一组图片后,我们就可以绘制出看起来更加生动的鲨鱼了。
代码上我们来这样做。
…
Bitmap acts[] = new Bitmap[4];
acts[0]= BitmapFactory.decodeResource(
gameActivity.getResources(),
R.drawable.shark01);
acts[1] = BitmapFactory.decodeResource(
gameActivity.getResources(),
R.drawable.shark02);
acts[2] = BitmapFactory.decodeResource(
gameActivity.getResources(),
R.drawable.shark03);
acts[3] = BitmapFactory.decodeResource(
gameActivity.getResources(),
R.drawable.shark04);
…
有了这样一组表示鲨鱼动作的图片后,我们就可以在绘制图片的时候循环这个动作图片的数组,来让鲨鱼“活起来了”。
有经验的程序员一眼就能看出问题:这样做不好吧?创建鲨鱼的动作图片的代码是写死在程序上的,这样不利于维护。什么意思呢?如果后期我们发现鲨鱼的动作不够流畅,想添加一帧鲨鱼的动作,这时候怎么办?我们修改代码?加上下面这句话?
acts[4] = BitmapFactory.decodeResource(
gameActivity.getResources(),
R.drawable.shark05);
看起来很好,但是我们在做程序的时候,总不能每次做了一点点改动都要修改程序吧?这样会带来什么问题呢?关键在于用户,用户总不希望我们每次修改了一下游戏,就要重新下载一遍完整的程序不是么?他们更希望看到的是,一次简单的更新。那我们怎么做呢?
好吧,我们来通过配置文件,定义一下鲨鱼的动作有多少,还有一点,我们不要吧鲨鱼的图片分开成不同的文件,我们可以用一张图片来描述所有的鲨鱼动作,在初始化鲨鱼的时候,通过鲨鱼动作的配置文件来分割这张图,达到上面的效果。
配置文件我们采取xml文件格式,android有这完善的解析xml的工具,简单方便。
Xml配置文件片段如下:
…
<key>010001.png</key>
<dict>
<key>frame</key>
<string>{{378, 438}, {374, 144}}</string>
<key>offset</key>
<string>{-2, 7}</string>
<key>sourceColorRect</key>
<string>{{61, 51}, {374, 144}}</string>
<key>sourceSize</key>
<string>{500, 260}</string>
</dict>
<key>010002.png</key>
<dict>
<key>frame</key>
<string>{{384, 294}, {380, 142}}</string>
<key>offset</key>
<string>{1, 7}</string>
<key>sourceColorRect</key>
<string>{{61, 52}, {380, 142}}</string>
<key>sourceSize</key>
<string>{500, 260}</string>
</dict>
…
我们在配置文件中规定了鲨鱼的每一帧图片的左上角坐标以及图片的宽度和高度。
<string>{{384, 294}, {380, 142}}</string>
这样就可以从鲨鱼的图片中将它裁剪出来做成一帧图片来存放在动作图片数组中。
鲨鱼的动作图片是这样的:
类似这样,我们就可以取到每一帧的动作了。
然后我们再循环这个动作数组,就可以改变鲨鱼的动作了。
那么,每次更新的时候,我们只需要将鲨鱼的动作图片上添加新的动作,再修改一下xml文件,就可以在不修改源程序的情况下达到添加鲨鱼动作的目的啦~这样不是很好么?
发表评论
文章已被作者锁定,不允许评论。
-
stopSelf()与stopSelf(startId)的区别
2016-04-14 14:44 1056startId:表示启动服务的次数 stopSelf(sta ... -
安装/卸载/替换成功广播接收
2016-01-08 11:59 745<receiver android:name=" ... -
ContentProivder
2015-12-09 09:26 457ContentProvider 我们实现了其中的几个方法 ... -
Android获取网络时间
2015-11-19 11:27 11081、实时获取: LocationManager locatio ... -
android animation知识
2015-11-14 11:47 539<?xml version="1.0" ... -
代码中设置android:drawableTop等
2015-11-14 10:42 975btnAttachment.setCompoundDrawab ... -
自定义View
2015-11-04 15:09 369一般来说,自定义View都会去重写onMeasure()方法, ... -
SimpleOnGestureListener
2015-11-04 12:03 484onScroll()缓慢滑动,手指滑动屏幕的过程中执行; on ... -
设置dialog在底部并宽度全屏显示
2015-11-02 11:53 2237pickerDialog.setContentView(vie ... -
横竖屏切换使用 android:configChanges="orientation|keyboardHidden"无效
2015-10-29 10:51 1717在之前的版本中都是在Manifest文件中设置Activity ... -
Dialog注意点
2015-10-28 17:14 473dialog:setCancelable与setCancele ... -
清除setBackgroundResource的原有值
2015-10-23 16:50 1103setBackgroundResource(0);清除原有的s ... -
接收隐式意图
2015-10-22 11:29 511想接收隐式意图,必须在他们的意图过滤器中配有:android. ... -
严苛模式
2015-10-14 20:25 1349//启用严苛模式,StrictMode可以用于捕捉发生在应用程 ... -
Android使用Animation完成动画保留最后一帧的办法
2015-09-08 10:43 2279在动画效果的xml中,在set标签中加上一条android:f ... -
控件getHeight和getWidth等于0的解决办法
2015-09-07 17:27 1339//监听layoutContainer是否初始化完成 l ... -
Service和Thread的区别?
2015-08-19 13:25 462servie是系统的组件,它由系统进程托管(servicema ... -
避免内存泄露
2015-08-18 19:21 4061、尽量避免在Activity使用static。 2、能使用A ... -
需要context的时候用activity还是application?
2015-08-17 17:02 671需要context的时候用activity还是applicat ... -
谈谈UI中, Padding和Margin有什么区别?
2015-08-10 17:18 1066Padding 文字对边框, margin是控件与控件之间的距 ...
相关推荐
对于游戏等对界面要求较高的程序,一般需要控制View中的具体图像显示(如动画功能)下面介绍实现此功能常用的SurfaceView控制。
是否因为两个补间动画不连贯而烦恼。其实这时可以使用属性动画进行两组动画的拼接,使动画看起来更流畅。这个例子就是使用属性动画开发的一个弹球动画效果,参考性很强。
Android 使用Dialog组件制作的登陆框特效,这是一个带动画效果的用户登录界面特效,运行后,登录框由上到下弹跳若干次后,慢慢停下来,用户可输入帐号、密码进行登录,加入动画效果,可让你的APP界面更活跃,有些...
opengl es 导入md2,ms3d与3ds模型。这个demo是eoeandroid论坛上下载的,经测试效果很好,效率也高。 还有这个是基于2.2的
android游戏开发常用类View、surfaceView、graphics、Canvas、shader及字符串、图像的绘制,图像旋转缩放,动画播放与制作等
主要介绍了Android App中使用SurfaceView制作多线程动画的实例讲解,SurfaceView经常被用来制作游戏中的动画,不过同时要注意画面闪烁的问题,需要的朋友可以参考下
包含图片的放大缩小,以及各种2d动画制作,也比较好玩
2利用短距离无线传输新技术,实现联机游戏 展望未来,android游戏开发在更多层面,更广思路上,更多游戏情结和规则上,利用w ifi技术和蓝牙,EDGE,实现玩家联机对战。蓝牙是一种新型,开放且低成本的短距离无 线...
2利用短距离无线传输新技术,实现联机游戏 展望未来,android游戏开发在更多层面,更广思路上,更多游戏情结和规则上,利用w ifi技术和蓝牙,EDGE,实现玩家联机对战。蓝牙是一种新型,开放且低成本的短距离无 线...
Unity所创作的跑酷游戏,包含大量素材及源码,下载即可运行。 包含各种角色动作,以及吃金币,吸铁石等动画效果。 是一套完整跑酷游戏。
让小朋友在手机上看动画演示笔画顺序,然后...本章将使用 Android技术开发一款书写数字的游戏,让小朋友在玩中学会写数字。欢乐写数字程序集合了页面布局、设置颜色、动画演示、背量景音乐、添加功能按钮及对话框等技术。
如何将游戏中常用的场景引入到原生App开发中呢?相信一定有人试图思考并尝试自己制作一些初级的游戏引擎,但绘制效率、框架等等都很难解决和完善,那么这篇文章可能会帮到你。如果你还想了解更多细节原理以及整体...
余志龙、陈昱勋、郑名杰、陈小风,分别来自手机制造业、电视媒体业、网络、电信产业、软件开发等领域,擅长嵌入式系统软件设计、J2ME游戏开发、Android开发,以及12EE、JSP、Servlet、Java Bean、PHP、C#等程序语言...
下载动画经常出现在下载需求多的app中,比如游戏下载平台,应用市场…… 先看看效果图: 实现 private void startAnim() { //以bitmap创建new ImageView iv.setDrawingCacheEnabled(true); Bitmap bitmap = iv...
余志龙、陈昱勋、郑名杰、陈小风,分别来自手机制造业、电视媒体业、网络、电信产业、软件开发等领域,擅长嵌入式系统软件设计、J2ME游戏开发、Android开发,以及12EE、JSP、Servlet、Java Bean、PHP、C#等程序语言...
余志龙、陈昱勋、郑名杰、陈小风,分别来自手机制造业、电视媒体业、网络、电信产业、软件开发等领域,擅长嵌入式系统软件设计、J2ME游戏开发、Android开发,以及12EE、JSP、Servlet、Java Bean、PHP、C#等程序语言...
在Android studio编译环境下,通过jbox2d 实现摩拜单车滚球动画
)创造优秀手机游戏不仅需要编写某些相当复杂的软件,还需要创造其他的成分,比如图像、动画、音效和音乐。幸运的是,这些成分都能够使用某些工具制作而成,而且许多工具可以免费使用。如果你能够上网并且拥有开发...
游戏是在 Unity 中制作的,因此可以随时导出 Android 和 IOS 设备! 解锁 6 位勇敢的英雄 选择你的战斗提升来击败邪恶 购买钻石可以更快地提升力量 特征 快节奏令人上瘾的游戏 肾上腺素(需要快速反应) 我们自己的...