亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么我的隨機數組沒有在每次渲染上繪制隨機紋理?我必須改變什么?

為什么我的隨機數組沒有在每次渲染上繪制隨機紋理?我必須改變什么?

呼如林 2023-08-16 10:06:40
在開始之前我想聲明我正在學習,我是全新的。在這里我添加了盡可能多的細節。所以,我有一組不同顏色的紋理,并設置一個 Random 來隨機化紋理,如下所示:Texture[] bubbles;Random random = new Random(); int lowRange = 0;int highRange = 3;int result = random.nextInt(highRange -lowRange) + 1; //my randomArrayList<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 循環以從屏幕頂部掉落的隨機顏色繪制紋理,如下所示:@Overridepublic 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);}它完美地隨機繪制紋理,但只有一次,當它創建時,我希望它們每次循環時都是一個新的隨機,所以每次掉落時都是不同的。為什么它不這樣做?我缺少什么?
查看完整描述

1 回答

?
蝴蝶刀刀

TA貢獻1801條經驗 獲得超8個贊

result它們之所以相同是因為您只在初始化時為其分配一次值,并且永遠不會更改它。如果你想讓它改變,你需要使用你的 Random 來分配另一個值。


random.nextInt(highRange -lowRange) + 1如果您想要一個介于lowRange和之間的隨機數,那么您的公式是不正確的highRange。這給你一個介于lowRange + 1和之間的數字highRange + 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 循環將如下所示。我在這里將紋理數組名稱更改為bubbleTextures可bubbles用于氣泡對象列表。


for (Bubble bubble : bubbles) {

    batch.draw(bubbleTextures[bubble.textureIndex],  bubble.x, bubble.y); 

    bubble.y -= 4;

}

我在您的代碼中發現了許多其他問題,但我認為解釋所有這些問題將是令人難以承受的。這至少能讓你朝著正確的方向前進。


查看完整回答
反對 回復 2023-08-16
  • 1 回答
  • 0 關注
  • 103 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號