java - 如何在不停止整个程序的情况下在java中等待
问题描述
我正在制作一款游戏,玩家一次最多可以投掷三个弹丸。我在重新加载时遇到问题。这是代码:
public class AmmoManager {
public void tick(){
if(Player.ammo <= 0){
for(int t = 0; t < 10; t ++){
}
Player.ammo = 3;
}
}
}
应该稍等片刻,然后将弹药设置为 3,但弹药一变为 0,立即设置为 3。我究竟做错了什么?
我试过使用睡眠,但整个应用程序会停止。
解决方案
问题是你的主程序等待 tick() 返回一些东西。
这样想;如果你有这个方法
public boolean isOne(int num){
Thread.sleep(1000);
if(num==1){return true;}
return false;
}
和
boolean result = isOne(1);
if(result){ //can't be ran until isOne(1) returns the boolean
//do something
}
当您调用 isOne() 时,您无法继续使用主类,因为您没有它返回的布尔值。您必须等待它返回值,然后您才能继续使用 main 方法
解决方案是线程。我不是这方面的专家,因此您需要咨询其他人或在线资源,但我认为它看起来像这样:
public void tick(){
new Thread({ new Runnable(){
@Override
public void run(){
if(Player.ammo <= 0){
Thread.sleep(*seconds* times 1000);
Player.ammo = 3;
}
}).start();
}
推荐阅读
- java - 如何在 JPA 中使用给定 SQL 模型的继承
- java - 无法在 freemaker TemplateMethodModelEx 实现上自动装配
- r - 异常值是否用于计算 ggplot2 中箱形图中的分位数?
- java - ManyToMany - JPA - 如何从映射生成的表中获取数据?
- css - javascript google map 缩放到零时为空的灰色背景
- javascript - 如何在 Javascript 中获取 CSS 值并将其保存为变量?
- c# - 如何将选定的复选框移动到复选框列表的顶部
- c++ - 为什么vector会导致Segmentation fault Error?
- php - Websockets 不能通过 TLS/SSL 工作,但可以在没有 TLS/SSL 的情况下工作
- node.js - 使用 node-oracledb executeMany 删除多条记录