首页 > 动漫游戏类/ 正文
Android环境下的游戏开发帧动画的播放与处理:
一、帧动画的原理
帧动画帧动画顾名思义,一帧一帧播放的动画就是帧动画。 帧动画和我们小时候看的动画片的原理是一样的,在相同区域快速切换图片给人们呈现一种视觉的假象感觉像是在播放动画,其实不过是N张图片在一帧一帧的切换罢了。
如图所示:人物行走动画的实现方式, 4帧行走动画在播放区域 一帧一帧向左切换播放 给人们一种播放动画的假象 ,图片就动了起来, 很简单吧,其它三方向播放动画的方法类似我就不再一一举例。
二、动画资源的原始文件
动画资源的原始文件PNG 一般有三种形式的呈现方式 请听我细细道来。
1.每一帧是一张png图片中
如图所示上下左右方向每一组动画中的每一帧都是一张png图片,播放动画须要切换整张图片 ,实现动画效果。代码中只需要将下一帧图片完整的覆盖住上一帧的图片就OK了,这种资源的排列方式在程序算法上是最简单的。
2.所有动画帧都存在一张png图片中
如图所示一张png中存放了人物所有的帧动画,播放动画的时候程序需要计算出将要播放的图片在原始图片中的起始坐标和结束坐标,也就是说要从原始图片中把将要播放的图片扣出来,从而显示在手机屏幕上。这种资源的排列方式程序需要编写计算图片坐标位置的算法。
三、动画编辑器处理动画
游戏公司都会有自己的动画编辑器 ,动画编辑器的好处是
1.减少图片大小节省内存空间
2. 缩短美工对坐标时间 ,因为如果没有编辑器美工很痛苦的需要一张图片一张图片的对坐标,全是体力活。
3.完全数据驱动动画 ,动画出问题程序不用改代码。BUG都是美术的 ,呵呵。
动画编辑器生成出来的其实就是坐标 告诉图片的每一个点 每个动画的点 拼接起来的每一个坐标 程序须要编辑对动画编辑器生成的xml文件根据生成出来的坐标 进行解析然后绘制出游戏动画。AuroraGT动画编辑器是笔者使用最多的一款动画编辑器它的功能非常强大可以编出任意动画。
给大家看看生成出来的动画效果很绚丽吧,是不是很给力呢 呵呵呵呵。
我用代码详细的说明一下第一种和第二种游戏动画的代码实现方法。
我自己写了一个动画类来处理播放动画,需要调用动画只需要new一个Animation对象传入动画所需要的参数通过调用 DrawAnimation 方法就可以按帧播放绘制动画。如果是单纯的学习的话我觉得这个类已经够学习使用了。
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 = ReadBitMap(context,frameBitmapID);
}
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);
}
}
复制代码
大家看看做的游戏demo 利用上下左右按键 播放向上 向下 向左 向右人物行走动画。
更多软件开发人员未来必须掌握的这5大趋势,河南有北大青鸟在哪里,郑州有什么技术学校,郑州专门培训电脑的学校需要上几年,郑州编程培训机构零基础如何学习呢?,郑州培训java开发学校学完能高薪就业的相关文章
- 分析:一些企业网络营销失败的原因
- 找不到好工作怎么办?
- 互联网设噫嘻网手机漫画奖-郑州计算机iT学院
- 大型网游成游戏业发展趋势-郑州游戏学院
- 推诛仙欧洲版本 完美时空国际化战略提速
- CGOC全球推广第三站圆满落幕-郑州计算机iT学院
- 2011年推两款产品完美坚持精品大作战略-郑州计算机iT学院
- 做好社交游戏必须要重视的5点
- 2010年网游从业人员薪资水平呈上升趋势
- DICE峰会观点:传统与新兴游戏发展共存
- 河南动漫飞速发展——郑州动漫培训学校
- 易观点评:2008年中国互联网年度10大事件
- 两位游戏策划老兵对新人的十个忠告
- 完美时空更名完美世界 海外收购计划或提速
- 腾讯公布2009年第二季度及中期业绩
- 前九城员工速评:CWOW、网易的未来在哪里
- 中国游戏企业海外淘金成新趋势
- 越危机 越游戏
- 国产网游出海忙 蓝港今年目标千万美元
- 传人民网将涉足网游运营 或与上市有关
- 学网络游戏开发破解就业难题
- 上海文广传媒进军网游-郑州计算机iT学院
- 逆市增长70%:网络游戏市场棋入中盘
- GameStop将开设Facebook商店-郑州计算机iT学院
- 暴雪成长史:给你一个最真实的暴雪
- 业界一致认为网游未来将保持高速增长
- 湖南卫视进军网游 争食三网融合蛋糕
- 巨人革新晋升机制 工程师可获副总级待遇
- 消息称中国雅虎拟进军网游熬过寒冬
- 教你看别人的QQ密码,但是不准偷QQ哦
- 搜索
-
- 热门标签