簡體   English   中英

如何解決這個無限循環

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM