1.动画的原则框架

       帧的动画帧的动画顾名思义,画就是帧动画。 帧动画和我们小时候看的动画片的原理是一样的,在同样区域高速切换图片给人们呈现一种视觉的假象感觉像是在播放动画,事实上只是是N张图片在一帧一帧的切换罢了。对摄像头不清楚的请看

p=992" rel="bookmark">Android研究之游戏开发摄像头更新

       如图所看到的:人物行走动画的实现方式, 4帧行走动画在播放区域 一帧一帧向左切换播放 给人们一种播放动画的假象 。图片就动了起来。 非常easy吧,其他三方向播放动画的方法类似我就不再一一举例。

\

2.动画资源的原始文件动画资源的原始文件PNG 一般有三种形式的呈现方式 请听我细细道来。
1.每一帧是一张png图片中
       如图所看到的上下左右方向每一组动画中的每一帧都是一张png图片,播放动画需要切换整张图片 ,实现动画效果。代码中仅仅需要将下一帧图片完整的覆盖住上一帧的图片就OK了。这样的资源的排列方式在程序算法上是最简单的。
2.全部动画帧都存在一张png图片中       如图所看到的一张png中存放了人物全部的帧动画,播放动画的时候程序须要计算出将要播放的图片在原始图片中的起始坐标和结束坐标,也就是说要从原始图片中把将要播放的图片扣出来。从而显示在手机屏幕上。

这样的资源的排列方式程序须要编写计算图片坐标位置的算法。

3.动画编辑器处理动画游戏公司都会有自己的动画编辑器 ,动画编辑器的优点是

 1.降低图片大小节省内存空间 

 2. 缩短美工对坐标时间 ,由于假设没有编辑器美工非常痛苦的须要一张图片一张图片的对坐标。全是体力活。

3.全然数据驱动动画 ,动画出问题程序不用改代码。

BUG都是美术的 。呵呵。

动画编辑器生成出来的事实上就是坐标 告诉图片的每个点 每个动画的点 拼接起来的每个坐标 程序需要编辑对动画编辑器生成的xml文件 依据生成出来的坐标 进行解析然后绘制出游戏动画。AuroraGT动画编辑器是笔者使用最多的一款动画编辑器它的功能很强大能够编出随意动画。

因为考虑到商业用途 对于这个编辑器的解析与使用我不做不论什么解释 。

假设仅仅是单纯的想学习我把编辑器的下载地址贴出来,大家能够互相研究互相讨论互相学习。

源代码下载:AuroraGT

" class="alignnone size-full wp-image-1004" alt="Android研究之游戏开发帧动画实现(三) - 第4张 | 成功智慧网-专注游戏编程开发!" src="http://www.cgzhw.com/wp-content/uploads/2014/07/414.jpg" style="">

给大家看看生成出来的动画效果非常绚丽吧,是不是非常给力呢 呵呵呵呵。
我用代码具体的说明一下第一种和另外一种游戏动画的代码实现方法。

       我自己写了一个动画类来处理播放动画。须要调用动画仅仅须要new一个Animation对象传入动画所须要的參数通过调用 DrawAnimation 方法就能够按帧播放绘制动画。假设是单纯的学习的话我认为这个类已经够学习使用了。
<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  利用上下左右按键 播放向上 向下 向左 向右人物行走动画。

" class="size-full wp-image-1009 aligncenter" alt="Android研究之游戏开发帧动画实现(三) - 第8张 | 成功智慧网-专注游戏编程开发。" src="http://www.cgzhw.com/wp-content/uploads/2014/07/82.jpg" style="">

最后因为代码较多我就不贴在博客中了 , 以下给出Demo源代码的下载欢迎大家下载阅读互相学习。互相研究。互相讨论 希望能够和大家一起进步。

源代码下载:Animation

版权声明:本文博主原创文章,博客,未经同意不得转载。

Android游戏开发研究帧动画实现的更多相关文章

  1. Android游戏开发研究与主角在地图滚动

     让人感动的地图过程平滑滚动         玩过rpg朋友应该都知道RPG的游戏地图一般都比較大 今天我和大家分享一下在RPG游戏中怎样来处理超出手机屏幕大小的游戏地图. 如图所看到的为程序效果 ...

  2. [Android游戏开发]八款开源 Android 游戏引擎 (巨好的资源)

    初学Android游戏开发的朋友,往往会显得有些无所适从,他们常常不知道该从何处入手,每当遇到自己无法解决的难题时,又往往会一边羡慕于 iPhone下有诸如Cocos2d-iphone之类的免费游戏引 ...

  3. Android游戏开发实践(1)之NDK与JNI开发03

    Android游戏开发实践(1)之NDK与JNI开发03 前面已经分享了两篇有关Android平台NDK与JNI开发相关的内容.以下列举前面两篇的链接地址,感兴趣的可以再回顾下.那么,这篇继续这个小专 ...

  4. Android游戏开发实践(1)之NDK与JNI开发01

    Android游戏开发实践(1)之NDK与JNI开发01 NDK是Native Developement Kit的缩写,顾名思义,NDK是Google提供的一套原生Java代码与本地C/C++代码&q ...

  5. Android游戏开发实践(1)之NDK与JNI开发02

    Android游戏开发实践(1)之NDK与JNI开发02 承接上篇Android游戏开发实践(1)之NDK与JNI开发01分享完JNI的基础和简要开发流程之后,再来分享下在Android环境下的JNI ...

  6. Android(java)学习笔记198:Android下的逐帧动画(Drawable Animation)

    1.帧动画: 帧动画顾名思义,一帧一帧播放的动画就是帧动画. 帧动画和我们小时候看的动画片的原理是一样的,在相同区域快速切换图片给人们呈现一种视觉的假象感觉像是在播放动画,其实不过是N张图片在一帧一帧 ...

  7. Android游戏开发实践(1)之NDK与JNI开发04

    Android游戏开发实践(1)之NDK与JNI开发04 有了前面几篇NDK与JNI开发相关基础做铺垫,再来通过代码说明下这方面具体的操作以及一些重要的细节.那么,就继续NDK与JNI的学习总结. 作 ...

  8. Android游戏开发之旅 View类详解

    Android游戏开发之旅 View类详解 自定义 View的常用方法: onFinishInflate() 当View中所有的子控件 均被映射成xml后触发 onMeasure(int, int) ...

  9. Android游戏开发基本知识

    Android游戏开发 手机游戏被业内人士称为继短信之后的又一座金矿.Android虽然基于Java,但是其虚拟机是基于寄存器的,速度得到了很大的提升,这为Android平台上开发游戏提供了坚强的后盾 ...

随机推荐

  1. 2048 Puzzle游戏攻略

    2048 Puzzle这是目前手机游戏的很火. 在地铁上经常看到的人玩这个游戏. 首先,简介2048 Puzzle游戏. 游戏界面是4X4广场格,每一方格可以放置在数字. 有四种移动数字的方法,向左. ...

  2. appendChild的用法

    appendChild的用法 1,先把元素从原有父级上删除 2,再把元素添加到新父级上

  3. 设置函数环境——setfenv(转)

    当我们在全局环境中定义变量时经常会有命名冲突,尤其是在使用一些库的时候,变量声明可能会发生覆盖,这时候就需要一个非全局的环境来解决这问题.setfenv函数可以满足我们的需求. setfenv(f, ...

  4. 【Java GUI】Java面板基础:JPanel

    有两个面板,常见的面板(JPanel)和滚动面板(JScrollPane) Jpanel 面板是一种常见的容器,JPanel的作用是实现接口层次结构,面放入一些组件.也能够在上面绘画,将放有组件和有画 ...

  5. 《Pro Android Graphics》读第三季度票据

    Android Frame Animation: XML, Concepts and Optimization Frame Animation Concepts: Cels, Framerate, a ...

  6. UiAutomator喷射事件的源代码分析

    上一篇文章<UiAutomator源代码分析之UiAutomatorBridge框架>中我们把UiAutomatorBridge以及它相关的类进行的描写叙述,往下我们会尝试依据两个实例将这 ...

  7. UVa11488-Hyper Prefix Sets(trie树)

    H Hyper Prefix Sets Prefix goodness of a set string is length of longest common prefix*number of str ...

  8. 一起学习android图像缩放资源 (27)

    效果图: 在平时载入图片时,我会使用SetImageBitmap.setImageResource.BitmapFactory.decodeResource来设置一张图 片通过以上方法来设置图片时.会 ...

  9. POJ 3009-Curling 2.0(DFS)

    Curling 2.0 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 12158   Accepted: 5125 Desc ...

  10. 第七章——DMVs和DMFs(2)——用DMV和DMF监控索引性能

    原文:第七章--DMVs和DMFs(2)--用DMV和DMF监控索引性能 本文继续介绍使用DMO来监控,这次讲述的是监控索引性能.索引是提高查询性能的关键性手段.即使你的表上有合适的索引,你也要时时刻 ...