【发布时间】:2017-12-03 16:38:17
【问题描述】:
我正在用 Java 开发一个小跳跃和跑步游戏。我的游戏总体上基于 youtube 教程 (https://www.youtube.com/watch?v=1gir2R7G9ws)。
我正在为播放器创建一个 jump() 方法。它现在很酷,但是我希望玩家以 2 的速度向上移动 2 个“场”。
所以我创建了一个 while 循环,它每次都询问高度(或 y 值),如果它更小甚至更小,那么它将速度设置为 0。
但由于某种原因,我不得不在 while 循环的主体中询问 Y 值,而无需在额外的线程中对其进行任何处理(认识到它在打印 y 时工作时)。
public static void jump(GameObject pObject) {
if (pObject.getSpeedY() == 0) {
int tmpY = pObject.getY();
pObject.setSpeedY(-2);
while (pObject.getY() >= tmpY - 64) {
new Thread(new Runnable() {
public void run() {
pObject.getY();
}
}).start();
}
pObject.setSpeedY(0);
}
}
我只是想了解为什么我需要在 while 循环中使用那个额外的线程,因为这对我来说毫无意义。我的假设是因为一些 Java 优化,但我不知道。谢谢你教我!
这个 sn-p 也可以。
public static void jump(GameObject pObject) {
if (pObject.getSpeedY() == 0) {
int tmpY = pObject.getY();
pObject.setSpeedY(-2);
while (pObject.getY() >= tmpY - 64) {
System.out.println(pObject.getY());
}
pObject.setSpeedY(0);
}
}
这个sn-p,但是失败了。虽然循环是无限的,但它不会改变不断变化的 y 值!
public static void jump(GameObject pObject) {
if (pObject.getSpeedY() == 0) {
int tmpY = pObject.getY();
pObject.setSpeedY(-2);
while (pObject.getY() >= tmpY - 64) {
pObject.getY();
}
pObject.setSpeedY(0);
}
}
【问题讨论】:
-
你实际上不需要它。此外,像您一样在 while 循环中启动线程是一个糟糕的主意。您想要完成什么,以及您的第一种方法没有实现什么?
-
while 循环之前是无限的,并且从未结束。然后我尝试在 while 循环中打印 y 值,然后它就可以工作了。我搜索了 println() 方法,发现它正在使用带有线程的东西,所以我尝试了这个。我不是 Java 专家
-
pObject.getY()在重复调用时如何改变返回值?它是在不同的线程中更改的吗?如果是这样,我认为你应该重新考虑你的设计。 -
我没有看到 tmpY 被更改,所以这必须发生在不同的线程中。也许最后一个代码与前两个代码之间的区别在于,执行 IO 操作或创建新线程可能会产生当前线程,从而为不同的线程提供更改 tmpY 值的机会,这在最后一个场景中不太可能发生都是计算。
-
这个问题不够清楚,我无法弄清楚发生了什么。请张贴发生的事情与您期望发生的事情。以及何时以及如何创建和操作 pObject。以及它是否发生在其他线程等中。
标签: java multithreading loops while-loop