我最近发现了如何绘制随机子画面,我想知道是否可以绘制从我的数组(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();
}
}
答案 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