我正在努力制作像Minecraft这样的游戏(2D)。 我不想使用TiledMap, 因为它不能(我没有找到方法)生成随机地图。
我的测试&代码:
public class game implements ApplicationListener {
private OrthographicCamera camera;
private SpriteBatch batch;
private Sprite block[] = new Sprite[26];
private int createdBlocks = 0;
private int line = 0;
@Override
public void create() {
float w = Gdx.graphics.getWidth();
float h = Gdx.graphics.getHeight();
camera = new OrthographicCamera(w, h);
batch = new SpriteBatch();
camera.position.x = 480;
camera.position.y = 320;
camera.update();
graphics.create();
player.create();
}
@Override
public void dispose() {
batch.dispose();
}
@Override
public void render() {
for(int i=0; i<=25;i++){
block[i] = new Sprite(graphics.stone);
if(i==5 || i==10 || i==15 || i==20)
line++;
int i2 = i;
if(i > 5)
i = 0;
block[i].setPosition(i2 * 32, line * 32);
}
Gdx.gl.glClearColor(1, 1, 1, 1);
Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
batch.setProjectionMatrix(camera.combined);
batch.begin();
player.render(batch);
for(int i=0; i<=100;i++)
block[i].draw(batch);
batch.end();
}
@Override
public void resize(int width, int height) {
}
@Override
public void pause() {
}
@Override
public void resume() {
}
}
它只是滞后,缓慢(加载)而没有用。
有更好的方法吗?
答案 0 :(得分:3)
关于您的代码:
每帧都会创建许多新的精灵(你的render()
方法中的循环)。您应该在其他地方创建精灵,可能是create()
方法。
关于创建没有TiledMap的地图:
您可以使用SpriteCache
代替SpriteBatch
来构建基于地形的地形。您可以查看使用SpriteCache
here
关于TiledMap的随机生成
.tmx
文件 - 只是XML结构化文件。您可以根据需要使用任何XML解析器在代码中生成它,这就是为什么创建随机TiledMap不是问题的原因。以下是一些基本说明:
P.S我不建议您为2D地图开发自己的解决方案,在90%的情况下,tmx足以创建2D地图。您还已经在libgdx中优化了tmx渲染类。