在上一节课中,我们创建了战旗Demo需要的属性显示菜单和操作菜单。这一节课中,我们将会学习创建自己的定时器以及定时器的应用。
由于在战旗类游戏中,人物都需要逐格逐步移动。所以使用定时器是一个比较好的做法。由于API自身的并不太好控制和重复利用,在这里我们将会自己来写。
这个定时器的功能其实很简单,我们只需要以一定的时间间隔来执行某个代码,并且能随意的控制开始和终止。
代码如下:
public class WTimer {
private OnTimerListener onTimerListener;
private long pTime, lastTime, nowTime;
private boolean isRunning = false;
private WTimer(OnTimerListener onTimerListener) {
this.onTimerListener = onTimerListener;
}
private WTimer(long pTime, OnTimerListener onTimerListener) {
this.pTime = pTime;
this.onTimerListener = onTimerListener;
}
public static WTimer createWTimer(long pTime, OnTimerListener onTimerListener) {
WTimer wTimer = new WTimer(pTime, onTimerListener);
return wTimer;
}
public void start() {
isRunning = true;
lastTime = System.currentTimeMillis();
}
public void update() {
if (isRunning) {
nowTime = System.currentTimeMillis();
if (nowTime - lastTime >= pTime) {
if (onTimerListener != null) {
onTimerListener.onTimerRunning(this);
}
lastTime = nowTime;
}
}
}
public void stop() {
isRunning = false;
}
public interface OnTimerListener {
void onTimerRunning(WTimer mTimer);
}
}
这里通过记录开始时间,然后在update的时候,记录时间差值来判断是否执行。
同样采用的Listener机制来做事件处理。
下面在我们的MainCanvas中定义WTimer:
// 移动的Timer
private WTimer moveTimer;
初始化Timer:
moveTimer = WTimer.createWTimer(50, new WTimer.OnTimerListener() {
@Override
public void onTimerRunning(WTimer mTimer) {
System.out.println("Timer Running");
}
});
最后在Update方法中增加代码:
public void update() {
moveTimer.update();
}
我们可以调用moveTimer.start()来测试一下是否运行正常。
本节中写的Timer,在后续角色移动,敌方回合的时候会用到。
那么这节课就到这里了,下节课我们将会讲解战旗类游戏用广度优先搜索来寻找角色可移动的范围。
本文章为个人原创,版权所有,转载请注明出处:http://blog.youkuaiyun.com/ml3947。另外我的个人博客:http://www.wjfxgame.com.