《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(); }}


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.