2013-09-09 3 views
0

Когда я делаю это:Как нарисовать только часть экрана с помощью SpriteBatch в libgdx?

SpriteBatch spriteBatch = new SpriteBatch(); 
spriteBatch.setProjectionMatrix(new Matrix4().setToOrtho(0, 320, 0, 240, -1, 1)); 
spriteBatch.begin(); 
spriteBatch.draw(textureRegion, 0, 0); 
spriteBatch.end(); 

SpriteBatch нарисует textureRegion на систему координат 320-240, что я указал на весь экран. Скажем, я хочу рисовать с той же системой координат 320 240, но только в левой половине экрана (что означает, что все будет уменьшено горизонтально в левой части, оставив правую половину экрана черным), как я могу делать?

ответ

5

Вы собираетесь использовать ScissorStack. Фактически, вы определяете прямоугольник, который хотите рисовать. Весь чертеж будет в указанном вами прямоугольнике.

Rectangle scissors = new Rectangle(); 
Rectangle clipBounds = new Rectangle(x,y,w,h); 
ScissorStack.calculateScissors(camera, spriteBatch.getTransformMatrix(), clipBounds, scissors); 
ScissorStack.pushScissors(scissors); 
spriteBatch.draw(...); 
spriteBatch.flush();  
ScissorStack.popScissors(); 

Это ограничит оказание в пределах прямоугольника «clipBounds». Можно также нажать несколько прямоугольников. Будут отображены только пиксели спрайтов, которые находятся во всех прямоугольниках.

От

+0

Я пробовал это, но это не так, как я хочу. Это отсечение, что означает, что 'spriteBatch' по-прежнему рисует весь экран, но он отображает только часть экрана. Я хочу, чтобы 'spriteBatch' действительно рисовал только часть экрана –

+2

Возможно, вы захотите обновить свой вопрос, чтобы было ясно, что вы не хотите обрезать, как мне было непонятно. –

+0

спасибо, я редактировал, что это была моя ошибка –

0

Может быть, я недоразумение вопрос, но вы могли бы не только двойной ширины окна просмотра, установив его на 640 вместо 320?

SpriteBatch spriteBatch = new SpriteBatch; 
spriteBatch.setProjectionMatrix(new Matrix4().setToOrtho(0, 640, 0, 240, -1, 1)); 
spriteBatch.begin(); 
spriteBatch.draw(textureRegion, 0, 0); 
spriteBatch.end(); 
0

Вы можете либо

  • двойной ширины окна просмотра в SpriteBatch
  • использовать Sprite и установить его ширину масштаб 0.5f (будьте осторожны, о происхождении) и использовать его draw(SpriteBatch) метод для его рисования.
0

Перед рендерингом партии вы можете настроить область просмотра на конкретную область экрана. Важная линия:

Gdx.gl.glViewport(x, y, w, h); 

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

x = 0; 
y = 0; 
w = Gdx.graphics.getWidth()/2; 
h = Gdx.graphics.getWidth(); 

Я нашел решение here и первоначально отвечал this question к немного более сложной задачи, но техника та же.

Чтобы сфокусироваться на любой части окна просмотра, просто выберите x, y, w и h соответственно. Если вы собираетесь делать какой-либо рендеринг в обычном режиме, обязательно верните окно просмотра с исходными значениями x, y, w и h.

Смежные вопросы