《Java 手機/PDA 程式設計入門》讀書筆記8--LCDAUI低級API之 線程 時間控制
來源:互聯網
上載者:User
筆記|程式|控制|設計
利用Thread解決paint()和使用者輸入響應同時將進行的問題。
public class Mycanvas extends Canvas implements Runnable{ int r=0; public Mycanvas() { Thread t=new Thread(this); t.start(); } public void run() { while(true) { r++; if(r>10) r=0; repaint(); } } public void paint(Graphics g) { clear(g); paintAnimation(g,100,10,r); } protected void keyPressed(int keycode) { switch(getGameAction(keycode)) { case Canvas.UP: y=y-2; break; …… } }}
j2me已將stop()方法拿掉(j2se也不再提倡使用),我們利用標識(flag)來解決線程結束的問題boolean conti=false;……if(cmd.equals("停止")){ conti=false; removeCommand(stop); addCommand(start);}else if(cmd.equals("開始")){ removeCommand(start); addCommand(stop); conti=true; Thread t=new Thread(this); t.start();}……public void run(){ while(conti) { r++; if(r>10) r=0; repaint(); }}
時間控制不同機器處理速度不同,為了保持遊戲,畫面的一致性,通過時間控制流程程來解決……int rate=50(50毫秒=1/20秒 畫面重繪一次)public void run(){ long s1=0; long s2=0; long diff=0; while(conti) { s1=Systen.currentTimeMillis(); repaint(); serviceRepaints(); s2=Systen.currentTimeMillis(); diff=s2-s1; System.out.rpintln(diff); if(diff<rate) { try { Thread.sleep(rate-diff); }catch(Exception exc){} } repaint(); }}