我目前正在尝试制作一款涉及随机生成世界的游戏。我目前有一个工作启动屏幕和一个工作柏林噪音生成器,并且已标准化。我所需要的只是一种实现显示图像的代码的方法。
代码:
public void show() {
batch = new SpriteBatch();
World world = new World();
int type = 0;
for (int y = 1; y < world.getlengthy();y++){
for (int x = 1; x < world.getlengthx();x++){
type = world.getvalue(x, y);
switch (type) {
case 1:sprite = new Sprite(tex1,0,0,16,16);sprite.setPosition(x, y);batch.begin();sprite.draw(batch);batch.end();
Gdx.app.log("", "x: " + x + " y: " + y);
break;
case 2:batch.begin();batch.draw(tex2, x, y);batch.end();
break;
case 3:batch.begin();batch.draw(tex3, x, y);batch.end();
break;
case 4:batch.begin();batch.draw(tex4, x, y);batch.end();
break;
case 5:batch.begin();batch.draw(tex5, x, y);batch.end();
break;
case 6:batch.begin();batch.draw(tex6, x, y);batch.end();
break;
case 7:batch.begin();batch.draw(tex7, x, y);batch.end();
break;
case 8:batch.begin();batch.draw(tex8, x, y);batch.end();
break;
}
}
最佳答案
您的代码需要位于 render
方法内部。如果屏幕第一次显示,则仅调用该节目。 (1 次调用!)因此,将 for 循环放入渲染周期内,它应该可以工作。
只是一个小提示。不要在渲染周期内创建对象 sprite = new Sprite(tex1,0,0,16,16);
。始终在 show 方法中或构造函数内部初始化所有对象以节省渲染时间。(它确实会在帧速率方面产生很大差异)
也只需在循环之前使用 begin()
一次,在循环之后使用 end()
一次。
例如这样的事情。我仍然不会在渲染中创建 Sprite ,但我不知道你的其余逻辑。希望这可以帮助!问候
@Override
public void show() {
batch = new SpriteBatch();
World world = new World();
}
@Override
public void render(float delta){
int type = 0;
batch.begin();
for (int y = 1; y < world.getlengthy();y++){
for (int x = 1; x < world.getlengthx();x++){
type = world.getvalue(x, y);
switch (type) {
case 1:
sprite = new Sprite(tex1,0,0,16,16);
sprite.setPosition(x, y);
sprite.draw(batch);
Gdx.app.log("", "x: " + x + " y: " + y);
break;
case 2:
batch.draw(tex2, x, y);
break;
case 3:
batch.draw(tex3, x, y);
break;
case 4:
batch.draw(tex4, x, y);
break;
case 5:
batch.draw(tex5, x, y);
break;
case 6:
batch.draw(tex6, x, y);
break;
case 7:
batch.draw(tex7, x, y);
break;
case 8:
batch.draw(tex8, x, y);
break;
}
}
batch.end();
}
关于java - 如何在嵌套 switch 语句中显示图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20451433/