【发布时间】:2013-03-11 15:37:57
【问题描述】:
我和我的一个朋友正在开发一款游戏,基本上,我们设置了一个碰撞箱,如果我们的角色(蜘蛛)击中它,角色就会失去生命值。
因为我们使用了 for 循环,所以不可避免的会发生,玩家 1 个 1 个失去生命值,但速度如此之快,人眼看不到。因此,我们需要为玩家每 x 次击中蜘蛛设置一个计时器、暂停或其他东西。这是我们的代码:
if (ResetEntities.spiderObj.intersects(ResetEntities.blueCharacterObj)) {
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
for (int i = 0; i < 100; i++) {
if (ResetEntities.blueHealth < 0) {
ResetEntities.blueHealth = 0;
Frame.blueHealthLabel.setText("Health: "
+ ResetEntities.blueHealth);
} else {
ResetEntities.getBlueHealth(ResetEntities.blueHealth - 1);
Frame.blueHealthLabel.setText("Health: "
+ ResetEntities.blueHealth);
}
}
}
在这段代码中,我们有一个 if 语句来检查交集。我试图让脚本休眠,(我意识到 10 的速度非常快,但 1000 的滞后非常可怕,所以Thread#sleep 不是我想的要走的路)。然后我们有一个 for 语句运行 100 次(作为球员的健康)。然后我们有一个 if 查看生命值是否低于 0,设置回 0,这样玩家就不会得到负生命值。如果它不低于 0,我们执行 else 并减去 1 生命值。但正如我所说,这运行得太快了。
有什么帮助吗?
【问题讨论】:
-
您的代码是一种方法。尝试睡眠 100L 到 200L 毫秒。
-
如果您想在
Java游戏中设置Timer,我建议您使用javax.swing.Timer而不是Thread。
标签: java multithreading swing timer