我正在开发一个小小的跳跃并用Java运行游戏。我的游戏总体上基于youtube教程(https://www.youtube.com/watch?v=1gir2R7G9ws)。
我正在为玩家创建一个jump()方法。它现在很酷但是,我希望玩家以2的速度移动2个“场”。
所以我创建了一个while循环,它每次都要求高度(或y值),如果它更小或更均匀,则将速度设置为0.
但由于某种原因,我不得不在while循环的主体中询问Y值而不在额外的线程中对它做任何事情(在打印y时它被识别时)。
function moveThing(pos){
var currentPos = pos;
currentPos += 5;
theThing.style.left = currentPos + "px";
if( Math.abs(currentPos) >= 900) {
currentPos = -500;
}
console.log(currentPos);
setTimeout(function(){moveThing(currentPos)}, 100);
}
moveThing(0);
我只是想明白为什么我需要在while循环中使用额外的线程,因为它对我来说没有任何意义。我的假设是因为一些Java优化,但我不知道。谢谢你教我!
此代码段也有效。
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);
}
}
此片段无论如何都是失败的。虽然循环是无限的,它不会改变不断变化的y值!
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);
}
}
答案 0 :(得分:0)
你在那里使用的线程几乎没用。 它所做的就是获得玩家的y位置。 当你不需要它时,为什么还要费心去获取一些信息。
此外,该线程位于while循环内。这种设计会对性能造成巨大的负面影好像代码创建了1000个线程,所有这些都没有做任何事情。 CPU浪费了分配和删除线程内存的时间。
你要做的是创造一种锁。在满足某些条件之前,CPU不会执行进一步的语句。如果没有,你的代码就会被卡住。
使用线程时尤其棘手。在这种情况下,您的主线程将停止执行并可能停止更新播放器的Y位置,您将进入无限循环。
我们仅使用新线程来检查玩家位置。这样,主线程可以更新位置,新线程可以监听玩家位置。但是,我们只创建1个线程,而不是1000个线程。
new Thread(new Runnable() {
public void run() {
while (pObject.getY() >= tmpY - 64) { continue; }
pObject.setSpeedY(0)
}).start();