Android游戏开发研究帧动画实现
1.动画的原则框架
帧的动画帧的动画顾名思义,画就是帧动画。 帧动画和我们小时候看的动画片的原理是一样的,在同样区域高速切换图片给人们呈现一种视觉的假象感觉像是在播放动画,事实上只是是N张图片在一帧一帧的切换罢了。对摄像头不清楚的请看 p=992" rel="bookmark">Android研究之游戏开发摄像头更新
\
这样的资源的排列方式程序须要编写计算图片坐标位置的算法。
1.降低图片大小节省内存空间
2. 缩短美工对坐标时间 ,由于假设没有编辑器美工非常痛苦的须要一张图片一张图片的对坐标。全是体力活。
3.全然数据驱动动画 ,动画出问题程序不用改代码。
BUG都是美术的 。呵呵。
动画编辑器生成出来的事实上就是坐标 告诉图片的每个点 每个动画的点 拼接起来的每个坐标 程序需要编辑对动画编辑器生成的xml文件 依据生成出来的坐标 进行解析然后绘制出游戏动画。AuroraGT动画编辑器是笔者使用最多的一款动画编辑器它的功能很强大能够编出随意动画。
因为考虑到商业用途 对于这个编辑器的解析与使用我不做不论什么解释 。
假设仅仅是单纯的想学习我把编辑器的下载地址贴出来,大家能够互相研究互相讨论互相学习。
源代码下载:AuroraGT
<strong>package cn.m15.xys; import java.io.InputStream; import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint; public class Animation { /** 上一帧播放时间 **/
private long mLastPlayTime = 0;
/** 播放当前帧的ID **/
private int mPlayID = 0;
/** 动画frame数量 **/
private int mFrameCount = 0;
/** 用于储存动画资源图片 **/
private Bitmap[] mframeBitmap = null;
/** 是否循环播放 **/
private boolean mIsLoop = false;
/** 播放结束 **/
private boolean mIsend = false;
/** 动画播放间隙时间 **/
private static final int ANIM_TIME = 100; /**
* 构造函数
* @param context
* @param frameBitmapID
* @param isloop
*/
public Animation(Context context, int [] frameBitmapID, boolean isloop) {
mFrameCount = frameBitmapID.length;
mframeBitmap = new Bitmap[mFrameCount];
for(int i =0; i < mFrameCount; i++) {
mframeBitmap[i] = ReadBitMap(context,frameBitmapID[i]);
}
mIsLoop = isloop;
} /**
* 构造函数
* @param context
* @param frameBitmap
* @param isloop
*/
public Animation(Context context, Bitmap [] frameBitmap, boolean isloop) {
mFrameCount = frameBitmap.length;
mframeBitmap = frameBitmap;
mIsLoop = isloop;
} /**
* 绘制动画中的当中一帧
* @param Canvas
* @param paint
* @param x
* @param y
* @param frameID
*/
public void DrawFrame(Canvas Canvas, Paint paint, int x, int y,int frameID) {
Canvas.drawBitmap(mframeBitmap[frameID], x, y, paint);
} /**
* 绘制动画
* @param Canvas
* @param paint
* @param x
* @param y
*/
public void DrawAnimation(Canvas Canvas, Paint paint, int x, int y) {
//假设没有播放结束则继续播放
if (!mIsend) {
Canvas.drawBitmap(mframeBitmap[mPlayID], x, y, paint);
long time = System.currentTimeMillis();
if (time - mLastPlayTime > ANIM_TIME) {
mPlayID++;
mLastPlayTime = time;
if (mPlayID >= mFrameCount) {
//标志动画播放结束
mIsend = true;
if (mIsLoop) {
//设置循环播放
mIsend = false;
mPlayID = 0;
}
}
}
}
} /**
* 读取图片资源
* @param context
* @param resId
* @return
*/
public Bitmap ReadBitMap(Context context, int resId) {
BitmapFactory.Options opt = new BitmapFactory.Options();
opt.inPreferredConfig = Bitmap.Config.RGB_565;
opt.inPurgeable = true;
opt.inInputShareable = true;
// 获取资源图片
InputStream is = context.getResources().openRawResource(resId);
return BitmapFactory.decodeStream(is, null, opt);
}
}</strong>
大家看看我做的游戏demo 利用上下左右按键 播放向上 向下 向左 向右人物行走动画。
最后因为代码较多我就不贴在博客中了 , 以下给出Demo源代码的下载欢迎大家下载阅读互相学习。互相研究。互相讨论 希望能够和大家一起进步。
源代码下载:Animation
版权声明:本文博主原创文章,博客,未经同意不得转载。
Android游戏开发研究帧动画实现的更多相关文章
- Android游戏开发研究与主角在地图滚动
让人感动的地图过程平滑滚动 玩过rpg朋友应该都知道RPG的游戏地图一般都比較大 今天我和大家分享一下在RPG游戏中怎样来处理超出手机屏幕大小的游戏地图. 如图所看到的为程序效果 ...
- [Android游戏开发]八款开源 Android 游戏引擎 (巨好的资源)
初学Android游戏开发的朋友,往往会显得有些无所适从,他们常常不知道该从何处入手,每当遇到自己无法解决的难题时,又往往会一边羡慕于 iPhone下有诸如Cocos2d-iphone之类的免费游戏引 ...
- Android游戏开发实践(1)之NDK与JNI开发03
Android游戏开发实践(1)之NDK与JNI开发03 前面已经分享了两篇有关Android平台NDK与JNI开发相关的内容.以下列举前面两篇的链接地址,感兴趣的可以再回顾下.那么,这篇继续这个小专 ...
- Android游戏开发实践(1)之NDK与JNI开发01
Android游戏开发实践(1)之NDK与JNI开发01 NDK是Native Developement Kit的缩写,顾名思义,NDK是Google提供的一套原生Java代码与本地C/C++代码&q ...
- Android游戏开发实践(1)之NDK与JNI开发02
Android游戏开发实践(1)之NDK与JNI开发02 承接上篇Android游戏开发实践(1)之NDK与JNI开发01分享完JNI的基础和简要开发流程之后,再来分享下在Android环境下的JNI ...
- Android(java)学习笔记198:Android下的逐帧动画(Drawable Animation)
1.帧动画: 帧动画顾名思义,一帧一帧播放的动画就是帧动画. 帧动画和我们小时候看的动画片的原理是一样的,在相同区域快速切换图片给人们呈现一种视觉的假象感觉像是在播放动画,其实不过是N张图片在一帧一帧 ...
- Android游戏开发实践(1)之NDK与JNI开发04
Android游戏开发实践(1)之NDK与JNI开发04 有了前面几篇NDK与JNI开发相关基础做铺垫,再来通过代码说明下这方面具体的操作以及一些重要的细节.那么,就继续NDK与JNI的学习总结. 作 ...
- Android游戏开发之旅 View类详解
Android游戏开发之旅 View类详解 自定义 View的常用方法: onFinishInflate() 当View中所有的子控件 均被映射成xml后触发 onMeasure(int, int) ...
- Android游戏开发基本知识
Android游戏开发 手机游戏被业内人士称为继短信之后的又一座金矿.Android虽然基于Java,但是其虚拟机是基于寄存器的,速度得到了很大的提升,这为Android平台上开发游戏提供了坚强的后盾 ...
随机推荐
- 2048 Puzzle游戏攻略
2048 Puzzle这是目前手机游戏的很火. 在地铁上经常看到的人玩这个游戏. 首先,简介2048 Puzzle游戏. 游戏界面是4X4广场格,每一方格可以放置在数字. 有四种移动数字的方法,向左. ...
- appendChild的用法
appendChild的用法 1,先把元素从原有父级上删除 2,再把元素添加到新父级上
- 设置函数环境——setfenv(转)
当我们在全局环境中定义变量时经常会有命名冲突,尤其是在使用一些库的时候,变量声明可能会发生覆盖,这时候就需要一个非全局的环境来解决这问题.setfenv函数可以满足我们的需求. setfenv(f, ...
- 【Java GUI】Java面板基础:JPanel
有两个面板,常见的面板(JPanel)和滚动面板(JScrollPane) Jpanel 面板是一种常见的容器,JPanel的作用是实现接口层次结构,面放入一些组件.也能够在上面绘画,将放有组件和有画 ...
- 《Pro Android Graphics》读第三季度票据
Android Frame Animation: XML, Concepts and Optimization Frame Animation Concepts: Cels, Framerate, a ...
- UiAutomator喷射事件的源代码分析
上一篇文章<UiAutomator源代码分析之UiAutomatorBridge框架>中我们把UiAutomatorBridge以及它相关的类进行的描写叙述,往下我们会尝试依据两个实例将这 ...
- UVa11488-Hyper Prefix Sets(trie树)
H Hyper Prefix Sets Prefix goodness of a set string is length of longest common prefix*number of str ...
- 一起学习android图像缩放资源 (27)
效果图: 在平时载入图片时,我会使用SetImageBitmap.setImageResource.BitmapFactory.decodeResource来设置一张图 片通过以上方法来设置图片时.会 ...
- POJ 3009-Curling 2.0(DFS)
Curling 2.0 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 12158 Accepted: 5125 Desc ...
- 第七章——DMVs和DMFs(2)——用DMV和DMF监控索引性能
原文:第七章--DMVs和DMFs(2)--用DMV和DMF监控索引性能 本文继续介绍使用DMO来监控,这次讲述的是监控索引性能.索引是提高查询性能的关键性手段.即使你的表上有合适的索引,你也要时时刻 ...