【问题标题】:How to draw on just a portion of the screen with SpriteBatch in libgdx?如何在 libgdx 中使用 SpriteBatch 在屏幕的一部分上绘制?
【发布时间】:2013-09-13 02:41:24
【问题描述】:

当我这样做时:

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

【问题讨论】:

    标签: opengl libgdx


    【解决方案1】:

    您将要使用 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

    【讨论】:

    • 我已经尝试过了,但这不是我想要的方式。这是剪辑,这意味着spriteBatch 仍然在整个屏幕上绘制,但它只渲染屏幕的一部分。我想要的是让spriteBatch 真正在屏幕的一部分上绘制
    • 您可能需要更新您的问题,以明确表示您不想剪辑,因为我不清楚。
    【解决方案2】:

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

    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 值重置视口。

    【讨论】:

      【解决方案3】:

      也许我误解了这个问题,但你能不能把视口宽度加倍,将其设置为 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();
      

      【讨论】:

        【解决方案4】:

        你也可以

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-09-02
          • 2018-04-14
          • 1970-01-01
          • 2017-01-17
          • 1970-01-01
          • 2012-10-03
          相关资源
          最近更新 更多