android游戏初步 01 游戏框架
2016-05-26 10:49
543 查看
大致流程: 使用SurfaceView 绘制 在子线程更新UI 让textveiw文本 随着鼠标点击移动 而移动
上代码
自己的surfaceview
在mainactivity 中调用
功能: 随着鼠标左右移动 textview 也随着移动
上代码
自己的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 CheckBox的OnCheckedChangeListener监听传值
- Android-TextView设置行间距与行高。
- Android基础
- Android - Binder驱动
- Android AutoLayout全新的适配方式 堪称适配终结者(1)
- TextView 设置粗体字
- Android监测用户行为,未操作定时执行事件
- Android6.0 Runtime permission
- Android studio 挂断电话 使用ITelephony.aidl
- 为简单而努力:Android封装类详解
- android开关按钮,Switch,ToggleButton,RadioButton,CheckBox ,多种实现开关按钮
- Android反编译工具使用
- android 基础 图片加载
- 【转载】InstantRun 原理——深度剖析 AndroidStudio 2.0
- android 将bitmap缓存到本地
- AndroidStudio中使用Git上传项目到github
- Android之代码混淆
- Android Studio常用插件
- Android开发环境搭建教程
- Android通用流行框架大全