游戏中的动态元素如角色移动、爆炸、过场等特效,这些动画的形成,有两种方式:系统提供Animation类的特效和自己手动实现。
1.Animation动画
分为四种效果:
AlphaAnimation:透明度渐变动画;
AcaleAnimation:渐变尺寸缩放动画;
TranslateAnimation:移动动画;
RotateAnimation:旋转动画。
动画创建:
Animation alphaA = new AlphaAnimation(float fromAlpha,float toAlpha)
Animation scaleA = new ScaleAnimation(float fromX,float toX,float fromY,float toY,int pivotXType,float pivotXValue,int pivotYType,float pivotYValue)
Animation translateA = new TranslateAnimation(float fromXDelta,float toXDelta,float fromYDelta,float toYDelta)
Animation rotateA = new RotateAnimation(float fromDegrees,float toDegrees,int pivotXType,float pivotXValue,int pivotYType,float pivotYValue)
在Animation中的四种动画创建都是new出来的,根据参数的不同可以构造出不同的动画效果。它们都有一些通用的方法:restart(),重新播放动画;setDuration(int time),设置动画播放时间,单位是毫秒。
除了以上四种特效之外,View还为特效提供了监听器。首先实现
android.view.Animation.AnimationListenter接口,然后重新该接口的3个抽象类:
@Override
public void onAnimationStart(Animation animation){
//动画开始时响应的函数
}
@Override
public void onAnimationEnd(Animation animation){
//动画结束时响应的函数
}
@Override
public void onAnimationRepeat(Animation animation){
//动画重播时响应的函数
}
三个函数监听动画的不同状态,其中三个函数的参数都表示当前播放的或者播放结束的动画实例;通过此参数可以对多个设置监听的动画进行判断和匹配。
最后使用动画实例Animation.setAnimationListener(AnimationListener listener)设置动画监听器即可。
2.自定义动画
(1)动态位图
只要不断改变位图的X或者Y轴的坐标,即可让一张位图形成动态的效果。
注意,使用SurfaceView的话,只有在视图执行完构造函数之后才可获取视图的宽高,在此之前获取的屏幕宽高都为0,原因是SurfaceView视图还没创建。
(2)帧动画
利用多帧图形形成的动画,帧动画其实就是多帧图形一帧一帧按照一定的顺序播放而形成的。
(3)剪切图动画
类似于帧动画的形式,唯一的区别就是动态物体的动作帧全部放在了一张图片中,然后再通过设置可视区域完成。
程序逻辑中一直让当前帧不断循环变化,这样每次重绘画布都会显示不同的帧,从而达到动态的效果。