java - 根据系统时间调用函数

标签 java algorithm time conditional-statements

我无法根据系统时间正确调用函数。我的主要目的是为我的“炸弹人”对象提供更好的运动效果。不幸的是,它的行为很奇怪。我相信有一个愚蠢的小错误,但由于 30 小时不眠,我找不到。这是我的代码:

                if (System.currentTimeMillis() % 600 <= 200) {
                    if (!gEngine.gMap.bomber.isImmune) {
                        gEngine.gMap.bomber.setImage("bomberman_up3.gif");
                    } else {
                        gEngine.gMap.bomber.setImage("bomberman_red_up3.gif");
                    }
                } else if (System.currentTimeMillis() % 600 <= 400) {
                    if (!gEngine.gMap.bomber.isImmune) {
                        gEngine.gMap.bomber.setImage("bomberman_up2.gif");
                    } else {
                        gEngine.gMap.bomber.setImage("bomberman_red_up2.gif");
                    }


                } else if (System.currentTimeMillis() % 600 >= 400)
                {
                    if (!gEngine.gMap.bomber.isImmune) {
                        gEngine.gMap.bomber.setImage("bomberman_up1.gif");
                    } else {
                        gEngine.gMap.bomber.setImage("bomberman_red_up1.gif");
                    }
                }

顺便说一下,我很确定奇怪的不是 gif 图像的顺序。代码应每秒更改图像 3 次。如果你帮助我,也许我可以 sleep 。 :)

提前致谢。

最佳答案

假设您使用计时器定期调用该函数,您的特殊问题似乎是您多次请求系统时间,而不是一次,因此您在这三个部分中测试的值会发生变化。

你最好创建一个元素队列来在给定的更新时间内绘制,因为如果你只使用大量的 if 语句而不是 OO 抽象,你的代码最终会变得越来越复杂.

当屏幕被绘制时,获取一次时间,并将该时间传递给所有要绘制的元素。那样的话,所有的元素都会彼此同步,并且你不会遇到第一个 if 的时间与第三个 if 的时间不同的问题>.

因此,我会让 BomberMan 实现一个接口(interface),该接口(interface)具有所有动画元素都实现的 draw ( Graphics2D g, long time ) 方法,并且具有 get 和 set 方法而不是公共(public) isImmune 字段。 get 和 set 方法更改 Sprite 图像数组的值,因此代码不需要知道炸弹人所处的任何其他状态。

关于java - 根据系统时间调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4552885/

相关文章:

java - 为什么ObjectNode在Json字符串中添加反斜杠

java - 无法让 Darkula 在 Netbeans 中以外观和感觉工作

java - Java中有没有一种方法可以生成遵循固定均值和标准差的随机数?

r - 在 R 中查找相邻坐标的有效方法

java - 如何随机化字符串中字母的大小写

java - 遍历图的顶点作为该顶点的方法

c# - System.Diagnostics.Stopwatch 不准确吗?

c - C中的时间函数

mysql - 有没有办法在 mysql now() 函数中显示上午/下午?

java - 具有嵌套元素的 JAXB