2014-12-13 10 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() { 
    } 
} 

его просто отстающий, медленно (загрузка) и не Usefull.

есть ли лучший способ?

+1

Вы повторно инициализируете 25 новых спрайтов (камней) каждый раз, когда вы делаете рендеринг, что может иметь какое-то отношение к тому, почему оно так сильно отстает. Переместите это для цикла в верхней части метода рендеринга в метод create – grimrader22

ответ

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-карт. Вы также уже оптимизировали класс рендеринга tmx внутри libgdx.

+0

@AUser приветствуем, если ответ поможет вашей проблеме рассмотреть возможность продолжения, если вы не знаете, как и почему читать это спасибо http://stackoverflow.com/tour –

+0

Спасибо! Но Ив нашел другой путь! ;) \t \t batch.setProjectionMatrix (camera.combined); \t \t batch.begin(); \t \t для (INT I = 0; я <100; я ++) { \t \t \t для (Int i2 = 0; i2 <100; i2 ++) { \t \t \t \t batch.draw (графики.камень 32 * i2, 32 * i); \t \t \t} \t \t} \t \t player.render (партия); \t \t batch.end(); – AUser