游戏中避免不了需要一些动画特效的处理,有些是不方便用美术或者美工来处理的,那么就由我们程序猿来搞了。直接进入正题。

    首先是Animation,Animation针对view,可以控制view的位移、缩放、旋转、淡入淡出等等,不做介绍了,网上很多例子,Animation的一些效果比如OvershootInterpolator做出来的效果还是挺不错的。

    然后是Matrix和ColorMatrix。Matrix提供rotate,scale,translate,skew4种处理,内部是一个3x3的矩阵,如图。

    

    网上其实也有很多例子,不多赘述了。需要注意的是一些复合用法,比如一边旋转一边缩放。Matrix每个操作都提供三种方法pre,post,set,pre和post是矩阵的左乘和右乘,set会把matrix对象重置为初始化的状态,然后再set对应的属性,比如setScale会把rotate等的属性擦除掉。如果矩阵用的不是很熟练那么也可以直接用一个float数组为matrix setvalue。

    ColorMatrix和Matrix类似,内部是5x5的矩阵,可以用来做一些图片颜色的特效比如灰度,饱和度,亮度,滤镜等等的处理。

    有关Matrix和ColorMatrix的详细可以参照某大神的blog。传送门:http://www.cnblogs.com/leon19870907/articles/1978065.html

    

    然后,在api 11,android为我们加入了一种属性动画,Animator。Animator与animation有个很大区别是,Animator会改变被操作对象的实际属性。而且Animator不只可以操作view,而是可以操作任何Object,详细可以参照APIDemo中com.example.android.apis.animation.MultiPropertyAnimation,网上也有很多相关的文章,在此不多赘述。要注意Animator要api level 11以后才可以使用。

    然后,还可以操作像素,简单提供个思路,算是抛砖引玉吧。

    先上代码。

 public static Bitmap getBitmap(Bitmap src) {
Bitmap newImage = null;
int w = src.getWidth();
int h = src.getHeight();
newImage = Bitmap.createBitmap(w, h, Config.ARGB_8888);//创建一张空图片
for (int i = 0; i < h; i++) {
for (int j = 0; j < w; j++) {
int rgb = src.getPixel(j, i);//取到像素值
int a = (rgb >> 24) & 0xff;
int r = (rgb >> 16) & 0xff;
int g = (rgb >> 8) & 0xff;
int b = rgb & 0xff;
int newRgb = (((r * 30 + g * 59 + b * 11) / 100) << 16)
| (((r * 30 + g * 59 + b * 11) / 100) << 8)
| ((r * 30 + g * 59 + b * 11) / 100) | a << 24; //拼装新的像素值
newImage.setPixel(j, i, newRgb);
}
}
return newImage;
}

    图片都是由像素组成的这个大家都知道。android为bitmap类提供了getPixel和setPixel方法。getPixel得到的是argb各8位的一个int值,通过位运算我们可以得到对应的a r g b值,就是透明度,红色,绿色,蓝色的值,然后通过处理得到一个新的rgb值,set回去。上面的代码是把彩色图片处理成黑白图的一种方式。没有考虑效率,只是提供个思路。要注意遍历像素做运算处理是比较慢的,所以不要在每帧的绘制过程中都去调用这种方法,应该用一个Bitmap做个缓存。这样只要知道rgb的变化过程就可以做出对应的特效。或者可以做一些像素级别的碰撞处理。

    简单的双缓冲。

    

Bitmap buf() {
Bitmap buf = Bitmap.createBitmap(100, 100, Config.ARGB_8888);//初始化缓冲图
Bitmap bitmap = BitmapFactory.decodeResource(getResources(),
R.drawable.ic_launcher);
Canvas canvas = new Canvas(buf);
canvas.drawBitmap(bitmap, 10, 20, null);//向缓冲中绘制图像
     return buf; 
}

    简单的双缓冲可以把整个的一个自定义canvas上的图像返回为一张bitmap,这样所有对bitmap的操作就同样适用于canvas了。使用时同样要注意效率。

    一些连续的动画或者曲线不规则轨迹,可以自己做一些简单的算法,或者用一些动画编辑器一类的东西。比如小球走抛物线轨迹,就可以每帧让x坐标变化,然后通过定义的公式y=ax²+bx + c;算出每帧的y值,这样小球就可以走简单的抛物线轨迹了。需要注意android上的坐标系和数学的坐标系是相反的,数学上y坐标是向上增长。android上目前没有找到好用的开源的动画编辑器,同行们有好用的可以推荐给我,灰常感谢。。。

    还有一些雾气,火焰等一些模拟的特效,那些就是opengl和粒子系统的东西了,一般一些引擎都已经封装的很好,有现成的粒子编辑器。模拟现实中的火焰、雾气等等的粒子效果。

    大概先写这些吧,有不对不足的地方欢迎指出~~~

    不是有那句话,如果你想走得快那么请你一个人走,如果你想走得远那么请你和一群人一起走。

    

android游戏动画特效的一些处理的更多相关文章

  1. Android ListView动画特效实现原理及源代码

    Android 动画分三种,当中属性动画为我们最经常使用动画,且能满足项目中开发差点儿所有需求,google官方包支持3.0+.我们能够引用三方包nineoldandroids来失陪到低版本号.本样例 ...

  2. [置顶] android 自定义ListView实现动画特效

    通过自定义ListView实现动画特效,被点击元素A向前移,A之前元素往后移动. 重点在于动画的实现: 具体代码如下: package com.open.widget; import java.uti ...

  3. Android的Activity切换动画特效库SwitchLayout,视图切换动画库,媲美IOS

    由于看了IOS上面很多开发者开发的APP的视图界面切换动画体验非常好,这些都是IOS自带的,但是Android的Activity等视图切换动画并没有提供原生的,所以特此写了一个可以媲美IOS视图切换动 ...

  4. Android游戏开发研究帧动画实现

     1.动画的原则框架        帧的动画帧的动画顾名思义,画就是帧动画. 帧动画和我们小时候看的动画片的原理是一样的,在同样区域高速切换图片给人们呈现一种视觉的假象感觉像是在播放动画,事实上只 ...

  5. Android绘图机制(四)——使用HelloCharts开源框架搭建一系列炫酷图表,柱形图,折线图,饼状图和动画特效,抽丝剥茧带你认识图表之美

    Android绘图机制(四)--使用HelloCharts开源框架搭建一系列炫酷图表,柱形图,折线图,饼状图和动画特效,抽丝剥茧带你认识图表之美 这里为什么不继续把自定义View写下去呢,因为最近项目 ...

  6. Android Animation动画详解(二): 组合动画特效

    前言 上一篇博客Android Animation动画详解(一): 补间动画 我已经为大家介绍了Android补间动画的四种形式,相信读过该博客的兄弟们一起都了解了.如果你还不了解,那点链接过去研读一 ...

  7. Android游戏与应用开发最佳学习路线图

    Android 游戏与应用开发最佳学习路线图 为了帮助大家更好的学习 Android,并快速入门特此我们为大家制定了以下学习路线图,希望能够帮助大家. 一.路线图概括: 二.具体需要掌握知识点: 三. ...

  8. Android游戏引擎总汇 原文出处:http://software.intel.com/en-us/blogs/2012/03/13/game-engines-for-android?page=1

    随着Android系统的使用越来越广泛,了解一下Android平台下的游戏引擎就非常有必要.而同时因为基于Intel x86的移动设备越来越多,我也非常关注支持x86的移动游戏引擎.然而就目前为止游戏 ...

  9. 八款常见的Android游戏引擎

    原文地址:http://bbs.csdn.net/topics/380203732 1.Angle  Angle是一款专为Android平台设计的,敏捷且适合快速开发的2D游戏引擎,基于OpenGL  ...

随机推荐

  1. 在Unity3D 4中关联Visual Studio 2012来编写C#

    Unity3D自带的MonoDevelop编辑器无论是js还是c#代码提示都很差,很诡异的就是变量名和方法名有的时候提示有的时候不提示.不过用Visual Studio代替MonoDevelop这个问 ...

  2. 【转】包管理器Bower详细讲解

      包管理器Bower   今天自己用Angular写东西的时候,下载了Angular-seed项目,发现需要用到bower,之前也使用过,没有仔细了解,今天趁机了解到一些. bower的官网地址:  ...

  3. 【c++】标准模板库STL入门简介与常见用法

    一.STL简介 1.什么是STL STL(Standard Template Library)标准模板库,主要由容器.迭代器.算法.函数对象.内存分配器和适配器六大部分组成.STL已是标准C++的一部 ...

  4. python 代码片段14

    #coding=utf-8 #enumerate是一个内置函数 data=(123,'abc',3.14) for i,value in enumerate(data): print i,value

  5. Idea_从Eclipse转Intellij IDEA

    场景:使用Intellij IDEA感觉还是不是很顺手,想放弃又舍不得它,如:强大的代码提示功能. 本人使用IntelliJ IDEA其实并不太久,用了这段时间以后,觉得的确很是好用.刚刚从Eclip ...

  6. Delphi中控制Excel(转载)

    用Delphi从数据库中取得资料,然后导出到Excel中做成报表是个不错的选择,因为Excel强大的报表功能那可是没话说前提Delphi中要 uses comobj;var Excel:Variant ...

  7. event.keycode大全(javascript)

    keycode 8 = BackSpace BackSpace keycode 9 = Tab Tab keycode 12 = Clear keycode 13 = Enter keycode 16 ...

  8. mysql安装后的配置

    mysql的安装其实就是一步一步按提示就可以: 1.开始安装 2.选择mysql安装位置 3.选择数据库存放位置,最好和mysql安装在一起,好查找 4.选择详细设置 5.选开发者机器 6.选多功能型 ...

  9. 安装Bind过程中提示丢失MSVCR110.dll的解决办法

    前几天在线安装Visual Studio 2012 Update 3,由于在线安装需要不断下载安装文件,时间很长,后来等不下去,就取消了,不幸的是VS启动不了了,弹出“devenv.exe – 系统错 ...

  10. axure rp extension的下载

    使用chrome无法直接打开axure制作的prd文档,需要下载相关插件.平时用的shadowsocksFQ软件,登录chrome的网上应用商店,确发现无法正常下载, 于是通过其他途径下载了改插件,拖 ...