Android游戏开发----动画Su易做图ceView详解
Su易做图ceView在游戏开发中占着举足轻重的地位。今天好好找资料看了看。附带自己写的例子。
写变化不太快的画面时,用View就足够了,用View写太快的画面变化时,可能会出现屏幕闪烁。当写如像植物大战僵尸、水果忍者等游戏时,用View就不能满足要求了。Android提供了Su易做图ceView,它是专门用来做动画,它是View的子类。
在Su易做图ceView自带2级缓存,当写变换比较快的游戏时,二级缓存会让游戏画面的变化看起来比较连贯一些。2级缓存的作用就是提前把将要绘制的图片放到内存里面。
一、实现最基本的Su易做图ceView只需基础即可,再按4个步骤来做即可。直接上代码,详细看代码里里面的注释。
[java]
public class GameView extends Su易做图ceView
{
Su易做图ceHolder su易做图ceHolder;
public GameView(Context context)
{
super(context);
//1. 获得Su易做图ceView下是Su易做图ceHolder, su易做图ceHolder相当于一个遥控器来控制Su易做图ceView
su易做图ceHolder = this.getHolder();
//这个是回调方法, 必须有. 否则会报空指针异常. 意思是su易做图ce创建, 销毁,改变
su易做图ceHolder.addCallback(new Callback()
{
@Override
public void su易做图ceDestroyed(Su易做图ceHolder holder)
{
}
@Override
public void su易做图ceCreated(Su易做图ceHolder holder)
{
//2. 在su易做图ce创建后锁定画布
Canvas canvas = su易做图ceHolder.lockCanvas();
//3. 可以在画布上进行任意的绘画操作( 下面是画一条红色 的线 )
Paint paint = new Paint();
paint.setColor(Color.RED);
canvas.drawLine(0, 0, 100, 100, paint);
//4. 将画布解锁并显示在屏幕上
su易做图ceHolder.unlockCanvasAndPost(canvas);
}
@Override
public void su易做图ceChanged(Su易做图ceHolder holder, int format,
int width, int height)
{
}
});
}
当然,这样写很明显不是最好的。只有Su易做图ceView很明显不能实现动画,当然要与线程结合起来。用线程来刷屏。
二、使用Su易做图ceView来写动画的一般写法。直接上代码,详细解释请看代码里里面的注释。
[java]
public class GameViewOK extends Su易做图ceView implements Callback, Runnable
{
Su易做图ceHolder su易做图ceHolder;
private boolean isThreadRunning = true;
Canvas canvas;
float r = 10;
public GameViewOK(Context context)
{
super(context);
su易做图ceHolder = this.getHolder();
su易做图ceHolder.addCallback(this);//注册回调方法
}
@Override
public void su易做图ceChanged(Su易做图ceHolder holder, int format, int width,
int height)
{
}
@Override
public void su易做图ceCreated(Su易做图ceHolder holder)
{
//创建su易做图ceView时启动线程
new Thread(this).start();
}
@Override
public void su易做图ceDestroyed(Su易做图ceHolder holder)
{
//当su易做图ceView销毁时, 停止线程的运行. 避免su易做图ceView销毁了线程还在运行而报错.
isThreadRunning = false;
//第三种方法防止退出时异常. 当su易做图ceView销毁时让线程暂停300ms . 醒来再执行run()方法时,isThreadRunning就是false了.
try
{
Thread.sleep(300);
} catch (InterruptedException e)
{
e.printStackTrace();
}
}
/**
* 将绘图的方法单独写到这个方法里面.
*/
private void drawVieW()
{
try
{//第一种方法防止退出时异常: 当isThreadRunning为false时, 最后还是会执行一次drawView方法, 但此时su易做图ceView已经销毁
//因此才来判断su易做图ceHolder
if (su易做图ceHolder != null)
{
//1. 在su易做图ce创建后锁定画布
canvas = su易做图ceHolder.lockCanvas();
//2. 可以在画布上进行任意的绘画操作( 下面是画一条红色 的线 )
补充:移动开发 , Android ,