2014-12-13 130 views
0

我正在尝试制作像Minecraft(2D)的游戏。 我不想使用TiledMap, 因为它不能(如何找到一种方式)生成随机地图。Libgdx在没有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() { 
    } 
} 

它只是滞后的,缓慢的(装载),而不是有用的。

有没有更好的方法?

+1

你每次渲染都会重新初始化25个新的雪碧(宝石),这可能与它为什么会滞后很多有关。将render方法顶部的for循环移动到create方法中 – grimrader22 2014-12-13 19:17:32

回答

2

关于你的代码:

您创造了很多新的精灵每帧(你的循环内render()方法)。你应该在其他地方创建你的精灵,可能在create()方法。

关于不TiledMap类创建地图:

您可以使用SpriteCache代替SpriteBatch用于构建基于瓷砖地面。你可以在例子来看看使用SpriteCachehere

关于随机生成TiledMap类

.tmx文件的 - 仅仅是XML结构化文件。您可以使用任何XML解析器以代码生成它,这就是为什么创建随机TiledMap不成问题的原因。以下是一些基本说明:

  1. 为您的随机地图创建贴图集。
  2. 用tmx编辑器创建一个示例映射。
  3. 用任何文本编辑器打开它,并看看文件结构。
  4. 生成的代码相似的文件,任何XML解析器(可以使用libgdx内置parser

PS我不建议你开发的2D贴图自己的解决方案,在90%的病例TMX对于创建2D地图已经足够了。您也已经在libgdx中优化了tmx render class。

+0

@AUser欢迎回答,如果答案有助于您的问题考虑upvote,如果您不知道如何或为什么阅读此谢谢http://stackoverflow.com/tour – 2014-12-14 11:19:55

+0

谢谢!但是,我发现另一种方式! ;)\t \t batch.setProjectionMatrix(camera.combined); \t \t batch.begin(); \t \t对(INT I = 0; I <100;我++){ \t \t \t对(INT I2 = 0; I 2 <100; I2 ++){ \t \t \t \t batch.draw(图形。石头,32 * i2,32 * i); \t \t \t} \t \t} \t \t player.render(批次);batch.end(); – AUser 2014-12-15 15:01:14

相关问题