用一个线程模拟多个线程,减少线程数量
游戏开发中,免不了有很多定时任务、动画效果。
这些不是在一次的流程中就能执行完毕的。
正常情况下,我会想到用线程,但是,这么多定时任务,这么多动画效果,哪能这么多线程呢?~
于是,笨木头有笨方法~
自己模拟一下多线程就好了嘛~不就间隔一段时间执行一个函数么,简单~
来,看看:
[java]
public class GameEventThread extends Thread {
private final String TAG = "GameEventThread";
private int SLEEP_TIME = 10;
/* 注意咯,A_GameEvent是一个事件类,就是用来模拟子线程的 */private ArrayList<A_GameEvent> gameEventList = new ArrayList<A_GameEvent>();
private boolean isRun = true;
public GameEventThread(String threadName) {
super(threadName);
}
public GameEventThread(String threadName, int iSleepTime) {
super(threadName);
this.SLEEP_TIME = iSleepTime;
}
/**
* 添加事件到线程的事件列表中
* @param event
*/
public void addGameEvent(A_GameEvent event) {
if(gameEventList.contains(event) == false) {
gameEventList.add(event);
}
}
public void stopRun() {
this.isRun = false;
}
@Override
public void run() {
Iterator<A_GameEvent> iter = null;
A_GameEvent event = null;
while(isRun) {
/* 遍历事件列表 */
try {
iter = gameEventList.iterator();
while(iter.hasNext()) {
event = iter.next();
/* 事件存活 */
if(event.isAlive()) {
/* 到达事件执行时间 */
if(event.isAtTheTime()) {
event.doEvent();
}
}
else {
/* 事件已经不存活,删除该事件 */
iter.remove();
}
}
} catch (ConcurrentModificationException e1) {
}
try {
Thread.sleep(SLEEP_TIME);
} catch (InterruptedException e) {
}
}
}
这是一个线程,要做的工作很简单,就是不断遍历事件列表,发现某个事件到达了执行时间,就执行该事件的回调函数~
那,那,你是不是很想问我,怎么判断事件达到了执行时间呢?~
来,听听我的做法:
[java]
public abstract class A_GameEvent implements I_GameEvent {
protected boolean isAlive = true;
private long startTime = 0;
private int iSleepTime = 0;
public A_GameEvent(int _iSleepTime) {
this.iSleepTime = _iSleepTime;
refreshStartTime();
}
/* 记录开始时间 */
public void refreshStartTime() {
startTime = System.currentTimeMillis();
}
/* 判断是否达到了时间间隔: 当前时间 - 开始时间 大于 休眠时间 */
public boolean isAtTheTime() {
long endTime = System.currentTimeMillis();
long span = endTime - startTime;
if(span >= iSleepTime) {
startTime = endTime;
return true;
&
补充:移动开发 , Android ,