gpt4 book ai didi

java - 非线性闲置游戏中如何管理时间?

转载 作者:行者123 更新时间:2023-12-01 16:43:42 25 4
gpt4 key购买 nike

我是 Java 新手,正在尝试为 Android 开发一款非线性闲置游戏。我对如何管理游戏中的“时间”有点困惑。

在线性闲置游戏中,我会使用 System.currentTimeMillis()在游戏期间(应用程序打开)和游戏重新启动时更新我的​​模型(由于模型是线性的,根据耗时更新模型的简单公式就足够了)。

但是在非线性闲置游戏中,我的模型必须是时间离散的,并且必须在游戏重新启动时完成循环。然后,在游戏重新启动时,我的模型无法使用 System.currentTimeMillis() 。我的想法是在游戏打开时使用特定的计时器来计算模型。但以我目前的知识,我不知道如何从我的所有类(class)中访问给定的计时器。

例如,在表示船舶的类中,有一种旅行方法。对于此示例,模型是线性的:

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. 在旅行结束时,我想发送一个新的“事件”,例如显示新的弹出窗口(或警报对话框)或启动方法。我怎样才能做到这一点?

希望我的解释足够清楚。

预先感谢您的回答。

最佳答案

您可以在主游戏类上添加一个 currentTime 字段,并在每次更新时将其传递给实体实例。您还可以使用static long 字段,但不鼓励这样做。示例:

class MyGame {
private long currentTime = 0;

private Ship myShip = /* TODO */;

// Called every x ms by an ExecutorService
public void update() {
// Update currentTime however you want
// e.g. currentTime += 1000

myShip.update(currentTime);
}
}

class Ship {
private int x;
private int y;

public void update(long currentTime) {
// TODO e.g. perform lerp with previous position
}
}

这被称为 Update Method模式。

关于java - 非线性闲置游戏中如何管理时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61815197/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com