android游戏初步 01 游戏框架

来源:互联网 发布:房屋设计软件 绿色 编辑:程序博客网 时间:2024/06/08 02:56

大致流程: 使用SurfaceView 绘制 在子线程更新UI 让textveiw文本 随着鼠标点击移动 而移动

上代码

自己的surfaceview

public class MySurfaceView extends SurfaceView implements Callback, Runnable {    //用于控制SurfaceView    private SurfaceHolder sfh;    //声明一个画笔    private Paint paint;    //文本的坐标    private int textX = 10, textY = 10;    //声明一条线程    private Thread th;    //线程消亡的标识位    private boolean flag;    //声明一个画布    private Canvas canvas;    //声明屏幕的宽高    private int screenW, screenH;    /**     * SurfaceView初始化函数     */    public MySurfaceView(Context context) {        super(context);        //实例SurfaceHolder        sfh = this.getHolder();        //为SurfaceView添加状态监听        sfh.addCallback(this);        //实例一个画笔        paint = new Paint();        //设置画笔颜色为白色        paint.setColor(Color.WHITE);        //设置焦点        setFocusable(true);    }    /**     * SurfaceView视图创建,响应此函数     */    @Override    public void surfaceCreated(SurfaceHolder holder) {        screenW = this.getWidth();        screenH = this.getHeight();        flag = true;        //实例线程        th = new Thread(this);        //启动线程        th.start();    }    /**     * 游戏绘图     */    public void myDraw() {        try {            canvas = sfh.lockCanvas();            if (canvas != null) {                //-----------利用填充矩形的方式,刷屏                ////绘制矩形                //canvas.drawRect(0,0,this.getWidth(),                //this.getHeight(), paint);                //-----------利用填充画布,刷屏                //      canvas.drawColor(Color.BLACK);                //-----------利用填充画布指定的颜色分量,刷屏                canvas.drawRGB(0, 0, 0);                canvas.drawText("Game", textX, textY, paint);            }        } catch (Exception e) {            // TODO: handle exception        } finally {            if (canvas != null)                sfh.unlockCanvasAndPost(canvas);        }    }    /**     * 触屏事件监听     */    @Override    public boolean onTouchEvent(MotionEvent event) {        textX = (int) event.getX();        textY = (int) event.getY();        return true;    }    /**     * 按键事件监听     */    @Override    public boolean onKeyDown(int keyCode, KeyEvent event) {        return super.onKeyDown(keyCode, event);    }    /**     * 游戏逻辑     */    private void logic() {    }    @Override    public void run() {        while (flag) {            long start = System.currentTimeMillis();            myDraw();            logic();            long end = System.currentTimeMillis();            try {                if (end - start < 50) {                    Thread.sleep(50 - (end - start));                }            } catch (InterruptedException e) {                e.printStackTrace();            }        }    }    /**     * SurfaceView视图状态发生改变,响应此函数     */    @Override    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {    }    /**     * SurfaceView视图消亡时,响应此函数     */    @Override    public void surfaceDestroyed(SurfaceHolder holder) {        flag = false;    }}

在mainactivity 中调用

public class MainActivity extends Activity {    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        //设置全屏        this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);        requestWindowFeature(Window.FEATURE_NO_TITLE);        //显示自定义的SurfaceView视图        setContentView(new MySurfaceView(this));    }}

这里写图片描述

功能: 随着鼠标左右移动 textview 也随着移动

0 0
原创粉丝点击