如何在libgdx中使用SpriteBatch在屏幕的一部分上绘图?

时间:2013-09-09 14:55:19

标签: opengl 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进行绘制,但仅在屏幕的左半部分 (这意味着所有内容都将在左侧水平缩小,使屏幕的右半部分变黑),我该怎么办?

4 个答案:

答案 0 :(得分:6)

您将要使用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”的范围内。   也可以推多个矩形。仅渲染所有矩形内的精灵的像素。

来自http://code.google.com/p/libgdx/wiki/GraphicsScissors

答案 1 :(得分: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();

答案 2 :(得分:0)

你可以

  • 加倍SpriteBatch
  • 的视口宽度
  • 使用Sprite并将其宽度比例设置为 0.5f (注意原点)并使用其draw(SpriteBatch)方法绘制它。

答案 3 :(得分:0)

在渲染批处理之前,您可以将视口设置为在特定屏幕区域上绘制。重要的一点是:

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

视口通常从x = 0和y = 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值重置视口。