我是 Java 新手,我正在尝试为 Android 开发一个非线性空闲游戏。我对如何管理游戏中的“时间”有点困惑。
在线性空闲游戏中,我会System.currentTimeMillis()
在游戏期间(应用程序打开)和游戏重新启动时更新我的模型(因为模型是线性的,基于经过时间更新模型的简单公式就足够了)。
但是在非线性空闲游戏中,我的模型必须是时间离散的,并且必须在游戏重新开始时进行循环。然后,在游戏重新开始时,我的模型无法使用 System.currentTimeMillis()
. 我的想法是在游戏打开时使用特定的计时器来计算模型。但是以我目前的知识,我不知道如何从我的所有课程中访问给定的计时器。
例如,在表示Ship的类中,有一种旅行方法。对于此示例,模型是线性的:
public class Ship {
double travelStartTime, travelEndTime;
double positionX, positionY;
double maxSpeed = 10;
public Ship(double buildPostionX, double buildPositionY) {
positionX = buildPositionY;
positionY = buildPostionX;
maxSpeed = 10;
travelStartTime = 0;
travelEndTime = 0;
}
public void startTravel(double destX, double destY){
travelStartTime = System.currentTimeMillis();
travelEndTime = System.currentTimeMillis() + travelTime(destX, destY);
}
public double travelTime(double destinationX, double destinationY) {
double currentX = this.getPositionX();
double currentY = this.getPositionY();
//calculate distance in km
double distance = Math.pow(Math.pow(currentX-destinationX, 2) + Math.pow(currentY-destinationY, 2), 0.5);
double time = distance/maxSpeed; //time in seconds
return time;
}
我的问题是:
1.我想System.currentTimeMillis()
用我自己的计时器替换(每次应用程序启动时启动),但我该怎么做?知道我的模型的任何类都需要访问同一个计时器吗?或者还有其他方法可以解决这个问题吗?
2.旅行结束时,我想发送一个新的“事件”,例如显示一个新的弹出窗口(或alertDialog)或启动一个方法。我怎样才能做到这一点 ?
希望我的解释足够清楚。
提前感谢您的任何回答。