凯哥打飞机-安卓

本文介绍使用Android的SurfaceView进行实时绘图,解决游戏开发中UI更新问题,避免主线程阻塞,提高游戏运行效率。通过自定义线程,实现画面的实时更新与资源的有效利用。

打飞机游戏效果
在这里插入图片描述
游戏中的二级缓存

android之surfaceView学习:
制作游戏时,为了时刻渲染游戏场景,涉及到一个实时画图的问题了,对于实时更新UI这个问题,android的UI更新都需要在主线程中更新,但是如果将一个实时绘图的操作放在主线程,必定会出现阻塞主线程的问题,即便是不阻塞主线程,也会降低程序运行的速度

surfaceView提供了UI线程。可以自己更新UI,因此,这样我们在surfaceView中进行实时的绘画,然后通过更改其中的绘画的数据,既可以实现我们想要的实时的更新UI的这个问题了,并且消耗较小的资源

surfaceCreated:创建时需要执行的操作
  surfaceView:大小改变时需要执行的操作
  surfaceDestroyed:销毁时进行的操作

//视图创建时通知
    public void surfaceCreated(SurfaceHolder holder) {
        this.holder = holder;
        runState = true;
        //视图创建时开始线程
        new Thread(this).start();
    }

    //界面发生改变的时候通知
    public void surfaceChanged(SurfaceHolder holder, int i, int i1, int i2) {

    }

    //销毁时通知
    public void surfaceDestroyed(SurfaceHolder holder) {
        runState = false;
    }

线程中的方法

public void run() {
        Random ran = new Random();

        try{
            while(true) {
                //获得绘画的画布
                Canvas canvas =  holder.lockCanvas();

                Paint p = new Paint();
                p.setColor(Color.rgb(ran.nextInt(255),ran.nextInt(255),ran.nextInt(255)));

                canvas.drawLine(ran.nextInt(1000),ran.nextInt(1000),ran.nextInt(1000),ran.nextInt(1000),p);

                //把绘画好的内容提交上去
                holder.unlockCanvasAndPost(canvas);//解锁
                Thread.sleep(1000);
            }
        }catch (Exception e){

        }
    }
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值