Java Libgdx-延迟随机颜色变化

Java Libgdx-延迟随机颜色变化,java,android,libgdx,Java,Android,Libgdx,我正在练习的游戏有一个问题,我正在努力解决的一个问题是在这四种颜色之间有一个随机的颜色变化——红、绿、蓝、黄。我的目标是让这个球在四种颜色之间切换时在屏幕上反弹,但我希望在颜色切换之间有一个延迟或暂停,比如至少3或5秒。到目前为止,在代码中,球似乎在变化,但没有延迟,我尝试使用一些延迟方法,如定时器。时间表,但每次我使用这个球在屏幕上反弹,但它是全黑,没有颜色,我真的很感谢任何帮助?我觉得问这样的问题很傻,因为我觉得这可能是个小问题 public class Play implements Sc

我正在练习的游戏有一个问题,我正在努力解决的一个问题是在这四种颜色之间有一个随机的颜色变化——红、绿、蓝、黄。我的目标是让这个球在四种颜色之间切换时在屏幕上反弹,但我希望在颜色切换之间有一个延迟或暂停,比如至少3或5秒。到目前为止,在代码中,球似乎在变化,但没有延迟,我尝试使用一些延迟方法,如定时器。时间表,但每次我使用这个球在屏幕上反弹,但它是全黑,没有颜色,我真的很感谢任何帮助?我觉得问这样的问题很傻,因为我觉得这可能是个小问题

public class Play implements Screen {   
Game game;

private Rectangle field = new Rectangle();
private Ball ball = new Ball();
private Paddle paddle1 = new Paddle(), paddle2 = new Paddle();  
private ShapeRenderer ballRenderer, paddleRenderer;
private float fieldTop, fieldBottom, fieldRight, fieldLeft;
private Color ballColor = new Color();
private Random rnd = new Random();

public Play(Game game){
    this.game = game;
}


@Override
public void render(float delta) {
    float dt = Gdx.graphics.getRawDeltaTime();
    update(dt);
    draw(dt);

}

private void update(float dt) {
    updateBall(dt);
    updatepaddle1(dt);
}

private void updatepaddle1(float dt) {
    boolean moveLeft = false, moveRight = false;
    if(Gdx.input.isTouched()){
        moveLeft = true;
        moveRight = false;
    }
    if(Gdx.input.isTouched()){
        moveRight = true;
        moveLeft = false;
    }

    if(moveRight){
        paddle1.setVelocity(350f, 0f);
    }else if(moveLeft){
        paddle1.setVelocity(-350f, 0f);
    }else{
        paddle1.setVelocity(0, 0);
    }

    paddle1.Intergrate(dt);

}


private void updateBall(float dt) {
    // TODO Auto-generated method stub
    ball.Intergrate(dt);
    ball.updateBounds();

    if(ball.left() < fieldLeft){
        ball.move(fieldLeft, ball.getY());
        ball.reflect(true, false);
    }

    if(ball.right() > fieldRight){
        ball.move(fieldRight - ball.getWidth(), ball.getVelocityX());
        ball.reflect(true, false);
    }

    if(ball.bottom() < fieldBottom){
        ball.move(ball.getX(), fieldBottom);
        ball.reflect(false, true);
    }

    if(ball.top() > fieldTop){
        ball.move(ball.getX(), fieldTop - ball.getHeight());
        ball.reflect(false, true);
    }
}


public void reset(){
    ball.move(field.x + (field.width - ball.getWidth()) / 2, field.y + (field.height - ball.getHeight()) / 2);
    Vector2 velocity = ball.getVelocity();
    velocity.set(330f, 0f);
    velocity.setAngle(360f-45f);
    ball.setVelocity(velocity);

    //set paddle
    paddle1.move(field.x + (field.width * .4f), 0);
    paddle2.move(field.x + (field.width * .4f), field.y + (field.height - paddle1.getHeight()));
}


private void draw(float dt) {
    Gdx.gl.glClearColor(0, 0, 0, 1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

    paddleRenderer.begin(ShapeType.Filled);
    drawPaddles(dt);
    paddleRenderer.end();


    ballRenderer.begin(ShapeType.Filled);
    ballColorSwap(ballColor);
    drawBall(dt);
    ballRenderer.end();

}


private void drawPaddles(float dt) {
    paddleRenderer.rect(paddle1.getX(), paddle1.getY(), paddle1.getWidth(), paddle1.getHeight());
    paddleRenderer.rect(paddle2.getX(), paddle2.getY(), paddle2.getWidth(), paddle2.getHeight());
}


int THRESHOLD = 4000;
long lastChanged = 0;
private void ballColorSwap(Color ballColor){
    int rnd = (int)(Math.random() * 4);
    if(rnd == 1){
        ballColor.set(Color.RED);
        }
        if(rnd == 2){
            ballColor.set(Color.BLUE);
        }
        if(rnd == 3){
            ballColor.set(Color.GREEN);
        }
        if(rnd == 4){
            ballColor.set(Color.YELLOW);
        }
        lastChanged = System.currentTimeMillis();
    }


private void drawBall(float dt) {
    if(System.currentTimeMillis() - lastChanged > THRESHOLD)
        ballColorSwap(ballColor);

    ballRenderer.circle(ball.getX(), ball.getY(), 20);
    ballRenderer.setColor(ballColor);

}



@Override
public void resize(int width, int height) {

}

@Override
public void show() {
field.set(0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
fieldLeft = field.x;
fieldRight = field.x + field.width;
fieldBottom = field.y;
fieldTop = field.y + field.height;
paddleRenderer = new ShapeRenderer();
ballRenderer = new ShapeRenderer();
reset();    

}

@Override
public void hide() {
}

@Override
public void pause() {
}

@Override
public void resume() {

}

@Override
public void dispose() {

}

}

您能再添加一个变量来保存时间戳吗

int THRESHOLD = 4000; // 4 seconds
long lastChanged = 0; // timestamp
public void ballColorSwap(){
    // maybe call it here?
    if(System.currentTimeMillis() - lastChanged < THRESHOLD)
        return;
    int rnd = (int)(Math.random() * 4);
    if(rnd == 1){
        ballColor.set(Color.RED);
    }
    if(rnd == 2){
        ballColor.set(Color.BLUE);
    }
    if(rnd == 3){
        ballColor.set(Color.GREEN);
    }
    if(rnd == 4){
        ballColor.set(Color.YELLOW);
    }
    // set the timestamp
    lastChanged = System.currentTimeMillis();
}
private void drawBall(float dt) {
    ballRenderer.circle(ball.getX(), ball.getY(), 20);
    ballRenderer.setColor(ballColor);
}

注意:我还没有测试这段代码。它可能需要一些修改,但希望你能理解。

所以我尝试了一下,结果是相同的,颜色改变了,但仍然没有延迟,但我觉得你可能会有所发现。回顾你的代码和我的代码,我意识到问题实际上可能是我制作的随机生成器,我认为在这里添加延迟应该可以解决问题是如何做?我很想提供帮助,但在没有看到全部代码的情况下,很难说。在这里,我从类中添加了更多代码,希望这可能会更亮,这仍然是一个正在进行的工作,但如果你需要更多,我会把它放在@entryleveldevp上,请查看我的编辑。我移动了if语句并将其操作更改为小于