为什么我的随机数组没有在每次渲染时绘制随机纹理? 我必须更改什么?



在我开始之前,我想声明我正在学习,我是全新的。在这里,我添加了尽可能多的细节。

因此,我有一个不同颜色的纹理数组,并设置了一个随机来随机化纹理,如下所示:

Texture[] bubbles;
Random random = new Random(); 
int lowRange = 0;
int highRange = 3;
int result = random.nextInt(highRange -lowRange) + 1; //my random
ArrayList<Integer> BubbleXs = new ArrayList<>();
ArrayList<Integer> BubbleYs = new ArrayList<>();
@Override 
public void create () {
bubbles = new Texture[4];
bubbles[0] = new Texture("blue.png");
bubbles[1] = new Texture("red.png");
bubbles[2] = new Texture("green.png");
bubbles[3] = new Texture("yellow.png");
}

然后,我继续使用 for 循环以从屏幕顶部落下的随机颜色绘制纹理,如下所示:

@Override
public void render () {
if (BubbleCount < 120) {
BubbleCount++;
} else {
BubbleCount = 0;
makeBubble();
}
public void makeBubble () {
float width = random.nextFloat() * Gdx.graphics.getWidth();
BubbleXs.add((int)width);
BubbleYs.add(Gdx.graphics.getHeight());
}
for (int i=0; i < BubbleYs.size(); i++) {
batch.draw(bubbles[result],  BubbleXs.get(i), BubbleYs.get(i)); 
BubbleYs.set(i, BubbleYs.get(i) -4);
}

它完美地以随机方式绘制纹理,但只有一次,当它创建时,我希望它们每次循环时都是一个新的随机,所以每次掉落时都是不同的。 为什么不这样做? 我错过了什么?

提前感谢!

编辑:我查看了这篇文章:随机更改纹理 但它并没有真正帮助任何人。

它们都相同的原因是,您只在初始化时将值分配给result一次,并且永远不会更改它。如果您希望它更改,则需要使用随机分配另一个值。

如果您想要一个介于lowRangehighRange(含(之间的随机数,您的公式random.nextInt(highRange -lowRange) + 1不正确。这给了你一个介于lowRange + 1highRange + 1之间的数字。正确的公式是random.nextInt(highRange - lowRange) + lowRange.

解决这个问题的方法是为每个存储随机整数的气泡创建一个额外的变量。您已经为已经存储的两个变量(x 和 y(中的每一个保留了一个列表。理论上你可以添加第三个,但实际上你只需要为每个气泡创建一个类,所以如果你添加更多功能,你可以很容易地扩展它。

class Bubble {
int x;
int y;
int textureIndex;
}

然后将两个数组列表替换为:

ArrayList<Bubble> bubbles = new ArrayList<>();

您的makeBubble方法应如下所示:

void makeBubble(){
Bubble bubble = new Bubble();
bubble.x = (int)(random.nextFloat() * Gdx.graphics.getWidth());
bubble.y = Gdx.graphics.getHeight();
bubble.textureIndex = random.nextInt(3);
}

你用于绘制它们的 for 循环看起来像这样。我在这里将您的纹理数组名称更改为bubbleTexturesbubbles以便可用于 Bubble 对象列表。

for (Bubble bubble : bubbles) {
batch.draw(bubbleTextures[bubble.textureIndex],  bubble.x, bubble.y); 
bubble.y -= 4;
}

我在你的代码中看到许多其他问题,但我认为解释所有这些问题会让人不知所措。这至少让你朝着正确的方向前进。

最新更新