android游戏初步 01 游戏框架

Posted 六道对穿肠

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android游戏初步 01 游戏框架相关的知识,希望对你有一定的参考价值。

大致流程: 使用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 也随着移动

以上是关于android游戏初步 01 游戏框架的主要内容,如果未能解决你的问题,请参考以下文章

开源java游戏框架libgdx专题-01-libgdx介绍

雄踞AppStore榜首的游戏&lt;别踩到白块儿&gt;源码分析和下载

[Android游戏开发]游戏框架的搭建

开始玩游戏时出现白屏是怎么回事

创建android html5游戏开发[关闭]

Android游戏开发大全的目录