[英]How to fix this infinite loop
我目前正在制作一款躲避激光的游戲。 我希望激光移動到屏幕上的任意y位置。 然后,一旦激光器位於所需的隨機位置,它將發射激光束。 重復此操作直到游戲結束; 也就是你打了激光束。
我不知道如何使它工作而不會遇到無限循環的問題,因為我對java和libgdx還是很陌生。
將標簽從javascript更改為Java。 抱歉。
您應該做什么:經過一番困惑后,我重新上課了。 我將fire()和move()組合到一個方法中,並使其從我的Screens渲染方法中調用(渲染稱為每一幀)。
package com.JrodManU.LaserJumper;
import java.util.Random;
import com.badlogic.gdx.graphics.g2d.Sprite;
import com.badlogic.gdx.math.Rectangle;
import com.badlogic.gdx.utils.TimeUtils;
public class Laser {
public Sprite image;
public Rectangle bounds;
public LaserBeam laserBeam;
public boolean on;
public long timer;
public Random random;
public int targetY;
public float speed;
public boolean moving;
public Laser(int x) {
moving = false;
on = false;
random = new Random();
image = Assets.laser;
bounds = new Rectangle(x, random.nextInt(892) + 32, 32, 16);
laserBeam = new LaserBeam();
move();
}
public void fire() {
laserBeam.bounds.y = bounds.y - 5;
on = true;
timer = TimeUtils.millis();
while(on) {
if(timer + 1000l < TimeUtils.millis()) {
on = false;
}
}
move();
}
public void move() {
targetY = random.nextInt(892) + 32;
speed = (targetY - bounds.y) / 100;
for(int i = 0; i < 100; i++) {
bounds.y += speed;
}
fire();
}
}
激光調用move()
調用fire()
而fire()
調用move()
。
循環在fire()
和move()
。
您需要以某種方式防止這種情況發生(使用return;
在有條件的情況下在火\\移動中可以完成工作)。
您會遇到無限循環,其中move()會在fire上調用,然后fire()會在move()上調用回來。
要解決此問題,您需要有一個條件來打破此調用循環。 例如,當激光在fire()函數中擊中播放器時。 這是一些偽代碼給您一個想法:
public void fire() {
if (playerHit)
gameOver();
else
move();
}
也許與您所處狀態的1000l
有關? 為什么里面有l
? 您也可以將循環更改為
while (true) {
if (...) { break; }
}
而不是增加一個布爾值來跟蹤整個事情?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.