2014-12-13 131 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

相關問題