首先,说下定时器的基本使用,以下内容摘自nokia 论坛里的一篇文章:
《为60系列平台设计java应用》--
定时器
各种定时器让各种应用能方便地规划任务,而不必对线程进行调配。使用线程通常需要更为复杂的设计,并需要更多的系统资源,对各种小设备而言,比较奢侈。
创建一个定时器的范例:
public class mytask extends timertask
{
private int icount;
public mytask(int astart)
{
super();
icount = astart;
}
public void run()
{
icounter--;
system.out.println(“counter is now ” + icounter);
if (icounter == 0)
cancel();
}
}
构建一个定时器并向其中添加mytask:
mytask mytask = new mytask(50);
timer mytimer = timer();
mytimer.schedule(mytask, 1000, 20000);
在这个范例中,每20秒就会调用一次mytask的run()方法。
并不保证定时器任务一定按时执行。各个定时器任务依次发生。如果其中一个任务需时很长,下一个任务只能在当前任务完成之后再执行。对于循环执行的任务,最好保证run()方法能很快完成。
一个以上地定时器也是可能的,这样就可以将任务分配到几个定时器上。然而,使用多定时器要多加小心,因为每个定时器只运行自己的线程,同步可能是需要的。
上面就是定时器的基本用法,对于一些简单的定时器操作这样做就可以了,直接把要执行的代码放入run中。对于逻辑结构复杂点的,需要多次执行run方法的时候就要另想办法来做了。下面是我使用定时器的一个框架,实际上就是个面向对象的应用,比较简单也好理解,希望对大家有个帮助,也希望有不同见解的朋友共同交流。
同样要有个类来继承timertask:
import java.util.timertask;
public class gametask extends timertask {
private gameobject m_object;
public gametask(gameobject object) {
m_object = object;
}
public void run() {
m_object.gametask();
}
}
然后再定义一个gameobject接口:
public interface gameobject {
public abstract void gametask();
}
最后就是在你的canvas类中使用了
:
public class gamecanvas extends fullcanvas implements gameobject {
。。。。。。
private static timer m_timer;
private static byte runcase
;
public gamecanvas(mjmidlet midlet, whkrms whkrms) {
。。。。。。
}
public void gametask() {
switch (runcase) {
case 0:
aaagametask();
break;
case 1:
bbbgametask();
break;
case 2:
cccgametask();
break;
}
//
分别实现各个方法,也就是run里面要执行的东西,分情况来执行对应 的run。
public void bbbgametask() {
m_bflash = !m_bflash;
repaint();
m_timer.schedule(new gametask(this), 500l);
}
public void keypressed(int i) {
switch (runcase) {
case 1:
aaapressed(i);
break;
case 2:
bbbpressed(i);
break;
}
}
//
分别实现相应的按键pressed()方法,可以在其中设置runcase的值,来控制程序。当然也可在其他地方设置runcase来控制。
public void aaapressed
(int i){
if
(i==-7){
。。。。。。
m_timer.cancel();
runcase=2
;
repaint();
(new timer()).schedule(new gametask(this), 500l);
}}
public void paint(graphics g) {
switch (runcase) {
case 0:
。。。。
break
;
case 1
:
。。。。
case 2
:
。。。。
}}}
整个的框架就是这样了~我用这个开发的是麻将类游戏,并不是整个游戏的框架哦~当然线程在整个游戏中也是要用到的,这里就不多谈了