+ -
当前位置:首页 → 问答吧 → 请问Thread绘图

请问Thread绘图

时间:2011-12-05

来源:互联网

假设我每20L重绘一次画面,也就是 FPS = 1000/20 = 50
另外希望每一秒能够更新物件数据

我的写法如下

Handler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Handler handler = new Handler() {
  public void handleMessage(Message msg) {
   switch (msg.what) {
   case(1): invalidate();
      break;
   case(2): Log.i("更新","物件数据"); updateShapePosition(currentShape,0,1); //invalidate(); break;
   }
   super.handleMessage(msg); }
};


Runnable
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public void run() { try { int i=1; while(true) { if (i%100 == 0) { i = 1; handler.sendEmptyMessage(2); } else { Log.i(TAG,"else " + Integer.toString(i)); handler.sendEmptyMessage(1); i++; Thread.sleep(20); } } }catch(Exception e) { Log.e("Error",e.toString()); }
}


Runnable利用一个int i 来判断当跑100次的时候即 20*100 =2000毫秒则更新数据,
想请问这样写法是不是有问题,因为印出的Log看起来并不是间隔2秒,
或是说应该换一种写法!

谢谢!

作者: metaltsr   发布时间: 2011-12-05


Runnable利用一个int i 来判断当跑100次的时候即 20*100 =2000毫秒则更新数据,
想请问这样写法是不是有问题,因为印出的Log看起来并不是间隔2秒,
或是说应该换一种写法!

谢谢!


当然没办法一定都两秒噜
你每次画图所花的时间不会是固定的,一定有时候快有时候慢
更何况你每次都还要给他休息20ms,就更不可能了

如果你想一定的时间更新,试试这样

1
2
3
4
5
6
7
8
9
10
long startTime = System.currentTimeMillis();
 
while(true) { ....... .... if((System.currentTimeMillis-startTime()) > 2000) { 状态更新; startTime = System.currentTimeMillis(); }
}

作者: Saber_Servant   发布时间: 2011-12-06

热门下载

更多