Libgdx从数组的不同位置绘制多个随机恶臭

时间:2018-08-13 11:51:53

标签: java libgdx

我最近发现了如何绘制随机子画面,我想知道是否可以绘制从我的数组(com.badlogic.gdx.utils.Array)中不同位置完全随机选择的多个子画面,而我的子画面可以吗?不能互相重复(同一张卡不能超过一张)。

卡类

public class Spades extends CardTypes {

    public Array<Sprite> spades = new Array<Sprite>(5);

    public void cards() {
        spades.add(ace = new Sprite(new Texture("spades/AS.png")));
        spades.add(two = new Sprite(new Texture("spades/2S.png")));
        spades.add(three = new Sprite(new Texture("spades/3S.png")));
        spades.add(four = new Sprite(new Texture("spades/4S.png")));
        spades.add(five = new Sprite(new Texture("spades/5S.png")));
    }
}

render方法

public class GameScreen implements Screen {

    Sprite card;
    private Spades spading = new Spades();

    private Main game;

    //create method
    public GameScreen(Main game) {
        this.game = game;
        spading.cards();
        card = spading.spades.random();
    }

    @Override
    public void render(float delta) {
        Gdx.gl.glClearColor(1, 0, 0, 1);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
        Gdx.graphics.getDeltaTime();
        game.getBatch().begin();
        game.getBatch().draw(card,100,0);
        game.getBatch().end();
    }
}

2 个答案:

答案 0 :(得分:3)

使用一些Math.random值创建一个循环,以从阵列中获取随机卡。为了确保两次都不会抽出卡,您可以使用另一个阵列来存储所有先前选择的卡,对于每个新卡,请首先检查该卡是否不在该阵列中。

例如:

Array<Sprite> drawnCards = new Array<Sprite>();
int randomCardNr = (int) Math.random() * 52;

for (int i = 0; i < amountOfCardsToBeDrawn; i++) {
    if (!drawnCards.contains(yourCardArray.get(randomCardNr)) { // Check if it hasn't been drawn before

        drawCard(yourCardArray.get(randomCardNr)); // This is your method to draw a card
        drawnCards.add(yourCardArray.get(randomCardNr)); // Add to drawnCards array
    }
}

如果需要,可以随意使用随机数从不同的数组中提取。

答案 1 :(得分:2)

我没有适合您粘贴的代码示例,相反,我可以给您一些提示来思考:

  • com.badlogic.gdx.utils.Array具有shuffle方法
  • 您有精灵,所以用它们来存储卡的位置:ace.setPosition(0, 100)
  • 您有精灵,请使用它们进行绘制:ace.draw(game.getBatch())

使用这些方法,您应该能够以不会在每次render通话中更改其位置的方式绘制随机卡片。

进一步阅读: https://github.com/libgdx/libgdx/wiki/Spritebatch,-Textureregions,-and-Sprites