Java 绘制随机图像libgdx

Java 绘制随机图像libgdx,java,android,libgdx,Java,Android,Libgdx,我正在用libgdx学习java游戏开发,有以下问题 我有一个矩形数组,我遍历它,并根据矩形的位置绘制图像 我的问题是,如何在每次渲染时都绘制一个随机图像,但在它离开屏幕之前仍然绘制相同的随机图像。目前,它正在绘制相同的图像,但我想知道如何绘制不同的管道图像每个国际热核实验堆 多谢各位 我的迭代器 Iterator<Rectangle> upperIter = upperPipes.iterator(); while(upperIter.hasNext()) {

我正在用libgdx学习java游戏开发,有以下问题

我有一个矩形数组,我遍历它,并根据矩形的位置绘制图像

我的问题是,如何在每次渲染时都绘制一个随机图像,但在它离开屏幕之前仍然绘制相同的随机图像。目前,它正在绘制相同的图像,但我想知道如何绘制不同的管道图像每个国际热核实验堆

多谢各位

我的迭代器

 Iterator<Rectangle> upperIter = upperPipes.iterator();
      while(upperIter.hasNext()) {
         Rectangle upperpipe = upperIter.next();
         upperpipe.x -= 8 * Gdx.graphics.getDeltaTime();
         if(upperpipe.x  < -32) upperIter.remove();

获取可重复随机数据的一个好方法是使用一个随机对象java.util.random适合游戏使用,并为其提供一个非随机种子。每次输入种子并请求相同的数字类型+范围序列时,您将获得相同的psuedo随机数。当你想要不同的数字时,只需改变种子

例如:

Random rand = new Random(1234);
System.out.println(rand.nextInt()); // an int from Integer.MIN to Integer.MAX
System.out.println(rand.nextInt(100)); // an int from 0 to 100
每次都将始终输出以下内容

-1517918040
33
但是将构造函数中的种子更改为Random,则输出值将更改。rand.setSeedseed将重置随机数以重新开始其序列

当rect在屏幕上时,您可以使用它反复生成相同的随机数集

但是,一种更直接、更简单的方法是,在创建每个rect时,只为其生成一个随机数,并存储该数字直到其离开:

public void drawPipes(){

    for(int i = 0; i<Pipes.color.size; i++){
        num = Pipes.color.get(i);
    }

    for(Rectangle bottomPipe: Pipes.lowerPipes) {
        switch(num){
            case 0:
                batch.draw(Assets.redPipeImg, bottomPipe.x, bottomPipe.y, bottomPipe.width, bottomPipe.height);
                break;
            case 1:
                batch.draw(Assets.yellowPipeImg, bottomPipe.x, bottomPipe.y, bottomPipe.width, bottomPipe.height); 
                break;
        }
    }
}
解决了

我创建了一个自定义管道类,并创建了一个管道数组,数组中的每个新管道对象都会随机生成一个图像。 我遍历了数组,并对每个管道对象调用了draw方法


简单又完美

我遇到的问题是在图像所附着的矩形离开屏幕之前一直绘制旧图像,所以你不会遇到图像每帧都会更改的问题,因为它每帧都会拾取一个新的随机图像?很抱歉,这正是问题所在,我没有完全理解你的回答。你能给我一个书面的例子,这样我就能理解你指的是什么。thxI尝试使用您的第二个建议,每次创建rect时创建一个新的int并将其放入整数数组,但我的问题是图形。我做错了,您最好扩展或包装矩形,使其索引与它一起存储,而不是单独存储。
public void drawPipes(){

    for(int i = 0; i<Pipes.color.size; i++){
        num = Pipes.color.get(i);
    }

    for(Rectangle bottomPipe: Pipes.lowerPipes) {
        switch(num){
            case 0:
                batch.draw(Assets.redPipeImg, bottomPipe.x, bottomPipe.y, bottomPipe.width, bottomPipe.height);
                break;
            case 1:
                batch.draw(Assets.yellowPipeImg, bottomPipe.x, bottomPipe.y, bottomPipe.width, bottomPipe.height); 
                break;
        }
    }
}