当前位置:操作系统 > 安卓/Android >>

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 ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,