《Java 手机/PDA 程序设计入门》读书笔记8--LCDAUI低级API之 线程 时间控制

王朝java/jsp·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

利用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();

}

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航