游戏中常见的元素就是图片了,想让一个游戏中的角色看起来更生动,单靠简单的移动和旋转图片是远远不够的,我们应该为角色添加动画,“动起来”的角色看起来既生动又贴近现实,具有更好的用户体验。那么动画在游戏中是如何实现的呢?

我们拿当今红的发紫的【捕鱼达人】这个游戏来说明。

如果我们有这样一张图片,想让这只鲨鱼动起来是很简单的一件事情,我们只需要将这张图片再每帧绘制的时候改变坐标就可以了。

代码片段如下:

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配置文件片段如下:

010001.png

frame

{{378, 438}, {374, 144}}

offset

{-2, 7}

sourceColorRect

{{61, 51}, {374, 144}}

sourceSize

{500, 260}

010002.png

frame

{{384, 294}, {380, 142}}

offset

{1, 7}

sourceColorRect

{{61, 52}, {380, 142}}

sourceSize

{500, 260}

我们在配置文件中规定了鲨鱼的每一帧图片的左上角坐标以及图片的宽度和高度。

{{384, 294}, {380, 142}}

这样就可以从鲨鱼的图片中将它裁剪出来做成一帧图片来存放在动作图片数组中。

鲨鱼的动作图片是这样的:

类似这样,我们就可以取到每一帧的动作了。

然后我们再循环这个动作数组,就可以改变鲨鱼的动作了。

那么,每次更新的时候,我们只需要将鲨鱼的动作图片上添加新的动作,再修改一下xml文件,就可以在不修改源程序的情况下达到添加鲨鱼动作的目的啦~这样不是很好么?

Android游戏添加游戏动画,Android游戏中的动画制作相关推荐

  1. unity editor android 黑屏_如何在Unity中利用nReal制作AR应用

    来源:新浪VR nReal眼镜是今年最有趣的增强现实小工具之一.它们已经在CES上展示过了,几个月前笔者在北京亲自试用过,在我的评测中,我强调了它们不仅非常轻.时尚,而且还能提供非常明亮的全息视图. ...

  2. android.mk 添加v7_在Android上以命令行方式移植FFmpeg

    最近要做视频I帧提取和摘要生成的项目,在Android平台上的应用,经过调研,发现ffmpeg有很多相关功能的轮子,因此考虑将ffmpeg移植到Android平台.为了更好解耦和以及更多的文档参考,选 ...

  3. android canvas添加文字居中,android Canvas drawText 文字居中

    1首先利用canvas获取画布的宽高, //获取屏幕的宽和高 int width = canvas.getWidth(); int height = canvas.getHeight(); 2获取文字 ...

  4. android动态添加顶部tab,android选项卡(Tab)实现顶部和底部

    1.自己创建一XML文件放于layout文件夹tab.xml(选项卡在顶部) encoding="utf-8"?> android:layout_width="fi ...

  5. vue如何使用原生js写动画效果_Vue中的动画效果

    Vue 在插入.更新或者移除 DOM 时,提供多种不同方式的应用过渡效果. 包括以下工具: 在 CSS 过渡和动画中自动应用 class 可以配合使用第三方 CSS 动画库,如 Animate.css ...

  6. 如何用python制作三维动画_课件中三维动画的Python实现

    课件中三维动画的 Python 实现 李保源 [期刊名称] <福建电脑> [年 ( 卷 ), 期] 2007(000)007 [摘要] 课件设计必须满足内容科学.交互性好.界面简洁漂亮.使 ...

  7. pygame为游戏添加背景_为游戏添加背景使用Python和Pygame模块构建一个游戏框架

    这系列的第一篇通过创建一个简单的骰子游戏来探究 Python.现在是来从零制作你自己的游戏的时间. 在我的这系列的第一篇文章 中, 我已经讲解如何使用 Python 创建一个简单的.基于文本的骰子游戏 ...

  8. android radiogroup 添加,如何在android中动态添加textview到radiogroup

    大家好, 我们想动态地在radiogroup旁边添加textview.基于服务响应,我们需要在不使用xml的情况下将标签添加到radiogroup. 在某些情况下基于最长无线电如何在android中动 ...

  9. android动态添加xml布局,android – 如何动态添加视图已经在xml布局中声明的RelativeLayout?...

    为第二个添加的Button LayoutParams添加规则RelativeLayout.RIGHT_OF: // first Button RelativeLayout rLayout = (Rel ...

  10. android.mk添加静态库,Android Gradle添加静态库

    看看这个 sample. >告诉编译器头部的位置(在android.ndk {}中): CFlags ="-I ${file("path / to / headers&quo ...

最新文章

  1. RHCS创建高可用性群集Apache服务器
  2. 一次看懂RIP协议。
  3. 使用ajax和history.pushState无刷新改变页面URL
  4. [codevs 1917] 深海机器人问题
  5. 超过200m文件发送_苦等10年的微信功能——大文件功能来了
  6. remotepath != null 与 !TextUtils.isEmpty(remotepath) 的区别
  7. 【剑指offer】面试题56 - I:数组中数字出现的次数 I
  8. C++或C 实现AES ECB模式加密解密,支持官方验证
  9. densenet网络结构_DenseNet轻量型网络
  10. 51Nod1253 Kundu and Tree 容斥原理
  11. 数电笔记之无关项化简逻辑函数
  12. Must specify unique android:id, android:tag, or have a parent with an id for XXX
  13. JDY-10M组网 蓝牙MESH组网
  14. 为什么let this=that
  15. 汽车数据流分析常采用哪些方法?
  16. C#上位机控制51单片机LED灯开关
  17. 正确关闭迅雷右侧浏览器的方法
  18. 微信支付分(二)--查询支付分订单
  19. Celery定时任务
  20. TN.STN液晶屏常见问题及解决办法

热门文章

  1. 一键还原的GHO文件夹打开方法(转载)
  2. opencore amr android,苹果手机amr文件用什么打开,opencore框架进行语音
  3. springboot tmp目录生成机制
  4. 电机与运动控制笔记整理(四)——具体异步电机分析
  5. 【编程马拉松】【014-红与黑】
  6. mac虚拟摄像头开发
  7. window启动activemq失败
  8. python入门基础知识(一)print
  9. 音创linux版e100加歌,麦得好ktv点歌机音创E100-A51,2.42新版本U盘加歌方法
  10. 计算机应用中双绞线细铜线几根,《计算机应用基础_在线作业_E100.doc