canvas教程

SurfaceView 和View 做游戏利与弊(2)

字号+ 作者:H5之家 来源:H5之家 2017-12-15 11:16 我要评论( )

UI的主线程中更新画面 可能会引发问题,比如你更新画面的时间过长,那么你的主UI线程会被你正在画的函数阻塞。那么将无法响应按键,触屏等消息。 当使用surfaceView 由于是在新的线程中更新画面所以不会阻塞你的UI


     UI的主线程中更新画面 可能会引发问题,比如你更新画面的时间过长,那么你的主UI线程会被你正在画的函数阻塞。那么将无法响应按键,触屏等消息。
当使用surfaceView 由于是在新的线程中更新画面所以不会阻塞你的UI主线程。但这也带来了另外一个问题,就是事件同步,涉及到线程同步。

 

所以基于以上,根据游戏特点,一般分成两类。 

1 被动更新画面的。比如棋类,这种用view就好了。因为画面的更新是依赖于 onTouch 来更新,可以直接使用 invalidate。 因为这种情况下,这一次Touch和下一次的Touch需要的时间比较长些,不会产生影响。 

2 主动更新。比如一个人在一直跑动。这就需要一个单独的thread不停的重绘人的状态,避免阻塞main UI thread。所以显然view不合适,需要surfaceView来控制。 

下面是使用sufaceView一个基本的框架: 

holder=getHolder(); holder.addCallback(}  @Override Thread t=isRunning=canvas=holder.lockCanvas();  canvas.drawColor(Color.BLACK);  canvas.drawCircle(x, y, 10, paint); holder.unlockCanvasAndPost(canvas);  }  canvas.drawColor(Color.BLACK); canvas.drawCircle(x, y, 10, paint);  holder.unlockCanvasAndPost(canvas);  }  (isRunning) {  paint(paint);  move();  e.printStackTrace();  }  }  }  private int x,y;  private void move(){ x+=2;  y+=2;  }  }  }

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • 关于改变ListView某一列的颜色

    关于改变ListView某一列的颜色

    2017-12-09 09:13

  • Android学习之ImageView放置gif动态图

    Android学习之ImageView放置gif动态图

    2017-12-04 17:00

  • 日本一家公司要做人造流星雨,每颗卖 6 万元

    日本一家公司要做人造流星雨,每颗卖 6 万元

    2017-11-30 12:00

  • 图文垂直居中 TextView+SpannableString

    图文垂直居中 TextView+SpannableString

    2017-11-21 09:10

网友点评
d