游戏动态画面开发基础

 

      游戏中的动态元素如角色移动、爆炸、过场等特效,这些动画的形成,有两种方式:系统提供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)剪切图动画

    类似于帧动画的形式,唯一的区别就是动态物体的动作帧全部放在了一张图片中,然后再通过设置可视区域完成。

    程序逻辑中一直让当前帧不断循环变化,这样每次重绘画布都会显示不同的帧,从而达到动态的效果。