- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 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/
关闭。这个问题是opinion-based .它目前不接受答案。 想改进这个问题?更新问题,以便 editing this post 可以用事实和引用来回答它. 6年前关闭。 Improve this
我的 symfony 应用程序 (3.4.8) 似乎忽略了任何延长 session 的尝试。解决此问题的最佳行动方案是什么?文档非常模糊。 应用程序/配置/security.yml security:
如何在Rails应用程序中设置如果任何用户闲置30分钟或特定时间段,则应自动注销该用户。 任何人都可以提出任何解决方案。我正在使用dev进行身份验证。任何帮助表示赞赏。 最佳答案 您应该使用 Time
我发现 Azure 容器实例 (ACI) 非常令人困惑。在 Azure 容器应用中,如果没有请求,服务将缩减至零并停止计费。然而ACI也有这样的功能吗? 例如,如果我部署一个每月调用一次的容器,并且每
我发现 Azure 容器实例 (ACI) 非常令人困惑。在 Azure 容器应用中,如果没有请求,服务将缩减至零并停止计费。然而ACI也有这样的功能吗? 例如,如果我部署一个每月调用一次的容器,并且每
有谁知道我如何编写一个 Javacript 函数,如果浏览器的 Javascript 引擎空闲了一定时间,该函数返回 true ? 我很乐意使用 mootools/jQuery 等,如果更容易的话,我
下面的方法会在 15 分钟后注销用户。但问题是,即使用户处于事件状态,也会将其注销。 我正在寻找解决方案,当用户在整整 15 分钟内不事件时,该方法将把他注销,而不是该方法不会运行。 public v
我需要我的应用程序在设备闲置一定时间后重新打开。换句话说,我的应用程序不会进入休眠模式并进入黑屏,而是会重新打开(假设它在后台运行)。将其视为“空闲屏幕”应用。 这在理论上相当简单,但我什至不知道它是
我正在制作一个需要监视 Gmail 帐户是否有新邮件的程序,为了尽快收到它们,我正在使用 JavaMail 的闲置功能。这是我用来调用 folder.idle() 的线程中的代码片段: //Run m
我的应用程序通过推送通知执行静默后台获取。一切正常,当用户在过去 60 分钟内打开应用程序或在 60 分钟内发送推送通知时,从我们的服务器发送的推送通知会按预期触发静默后台提取 - 即使设备已锁定。
在我的 raspberry pi(raspbian 运行)上,我想在空闲系统 5 分钟后(没有鼠标或键盘操作)将当前桌面切换到桌面 n#0,通过 wmctrl -s 0 和 xprintidle 用于
在 iOS 应用程序中,您可以设置 application.idleTimerDisabled = YES 以防止手机自动锁定。 我需要在移动版 Safari 中为像 Doodle Jump 这样的游
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 10 年前。 Improve thi
我一直在 AWS Lambda 中修改 nodejs 代码,由一些 API 网关端点调用。我注意到在没有任何 API 网关调用的情况下经过一定时间后,下一个 API 网关请求将超时。我将收到标准的 L
我是一名优秀的程序员,十分优秀!