2016-12-21 5 views
0

Я создал кучу прямоугольников, используя цикл for, а затем добавил их в список массивов. Я учил, что рендеринг будет похож на то, как вы даете userdata из box2d.Как визуализировать несколько фигур в Libgdx?

sr.setProjectionMatrix(camera.combined); 
sr.begin(ShapeRenderer.ShapeType.Filled); 
    for(Rectangle r : rectangles) 
      sr.rect(r.x, r.y, r.width, r.height); 

sr.end(); 

проблема заключается в том, что после того, как сюда цикл закончится, прямоугольники не оказывается больше, я знаю, что это происходит потому, что вы не делаете фактический прямоугольник, но только с помощью shapeRenderer, чтобы нарисовать фигуру с помощью атрибуты прямоугольников. Есть ли способ сделать это, что похоже на то, как вы делаете спрайт?

+0

Это точно так же, как вы визуализируете спрайт. Вы должны отображать их при каждом вызове 'render()', потому что экран перерисовывается в каждом кадре, как и в SpriteBatch. – Tenfour04

+0

Я знаю, но в формах вы не визуализируете фактический прямоугольник, sr.rect (r.x, r.y, r.width, r.height). В спрайте вы делаете фактический спрайт следующим образом: sprite.draw (пакет). Вы просто получаете атрибуты прямоугольника, чтобы shapeRenderer рисовал фигуру. но не фактическая форма прямоугольника. –

ответ

0

В LibGDX класс Sprite специально разработан для рендеринга с помощью SpriteBatch. Он содержит фактический массив данных, который можно скопировать непосредственно в массив данных Mesh SpriteBatch. Вот почему он имеет собственный метод draw, в отличие от TextureRegion. Этот массив данных поддержки в Sprite дает ему потенциал для более быстрого рисования, потому что некоторые его данные должны быть пересчитаны только в том случае, если они перемещаются.

ShapeRenderer не предоставляет никакого способа напрямую передать массив массивов вершин Mesh. А класс Rectangle не предназначен специально для рендеринга. Если вы просто ищете более простой способ написания кода чертежа, вы можете подклассифицировать Rectangle, чтобы добавить удобный метод для его прямого рисования с помощью ShapeRenderer.

public class MyRectangle extends Rectangle { 

    //... constructors 

    public void draw (ShapeRenderer shapeRenderer){ 
     shapeRenderer.rect(x, y, width, height); 
    } 
} 
Смежные вопросы