我和我的一个朋友正在制作一款游戏,基本上,我们设置了一个击球盒,如果我们的角色击中它(蜘蛛),角色会失去健康。
因为我们正在使用for循环,所以不可避免地会发生,玩家逐渐失去健康,但人眼看不到它。因此,我们需要一个计时器,暂停或其他东西,每个玩家正在击中蜘蛛的时间。这是我们的代码:
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 if看健康是否低于0,设置回0,所以玩家不能得到负面的健康状况。如果它不低于0,我们做其他并减去1健康。但正如我所说的那样,跑得太快了。
任何帮助?
答案 0 :(得分:2)
传统方式 - 而且在我看来最好的方式 - 这样做是为了让受伤的角色在特定的时间点内无法受伤:当角色受伤时,检查游戏时间线(或者如果你没有一个那么当前的millis-count)然后添加一个特定的时间,例如1秒(或与字符相关的恢复时间),并记住字符对象中的时间戳。想要先伤害角色的游戏技巧首先检查角色是否仍处于隐形无敌之中。这是特别好的,因为通常人们并不真的希望多个线程更新游戏状态。
答案 1 :(得分:1)
使用Timer作为后台流程的时间安排。并使用javax.swing.SwingUtilities.invokeLater(Runnable)
更新您的GUI。
答案 2 :(得分:1)
问题尚不清楚,但你是否在问如何能够如此迅速地阻止健康?如果是这样,我就会这样做:
你应该有一个int值invincibilityTime并在玩家被击中后将其设置为100,然后每当你的游戏通过游戏循环时它会减少一个。将if(invincibilityTime <= 0)
放在(ResetEntities.spiderObj.intersects(ResetEntities.blueCharacterObj))
之前,检查可见期是否已过期。