【问题标题】:Java & LibGDX: Limit Rendering Range of a SpriteJava & LibGDX:限制 Sprite 的渲染范围
【发布时间】:2014-11-25 17:16:48
【问题描述】:

最近我从在 Java 中使用整数的array 作为我的屏幕切换到使用库。我使用的库是LibGDX,对我来说转换是完全不同的。大多数事情我已经开始掌握,而且我还在自己编写一些代码。

此时,我很好奇我是否可以限制Sprites 的渲染范围和任何其他绘图因素,例如如果一个精灵卡在盒子的中途,它就不会渲染突出的部分(因此:)


有没有办法在特定范围内渲染,如果部分超出范围,它不会渲染超出范围的内容,还是我必须自己做?

【问题讨论】:

    标签: java libgdx sprite render


    【解决方案1】:

    您可以使用LibGDX ScissorStack 对矩形进行简单的“剪辑”。

    因为 OpenGL 是有状态的并且许多 LibGDX 绘图 API 缓存,所以一定要在剪刀的范围内“刷新”或“结束”你的批次。见libgdx ScissorStack not working as expectedlibgdx Cutting an image

    【讨论】:

      【解决方案2】:

      如果我没有误会你,你正在寻找camera
      camera 允许您定义 Viewport(大小),您只能看到 Viewport 中的内容。
      您也可以将它移动到世界其他地方。

      例如:

      OrthographicCamera cam = new OrthographicCamera(80, 45);
      

      这定义了一个camera,它在 x 中显示 80 个单位,在 y 中显示 45 个单位。默认情况下,它 P(0/0) 位于屏幕中间,因此此 camera 显示 x 方向 -40 到 +40 和 y 方向 -22.5 到 + 22.5 的对象。
      您可以移动它,使 P(0/0) 在左下角:

      camera.position.x = -40;
      camera.position.y = -22.5;
      camera.update();
      

      这应该将相机向左移动 40 个单位并向下移动 22.5 个单位,因此 P(0/0) 是左下角。不要忘记调用update(),因为这会重新计算投影和视图矩阵。

      最后,要使用此camera 进行绘制,您需要将SptieBatchs projectionMatrix 设置为camera 之一:

      spriteBatch.setProjectionMatrix(camera.combined);
      

      现在您可以使用此SpriteBatch 进行绘图了。
      您还应该考虑使用ViewFrustum-Culling,这意味着您不会从camera 中绘制东西,因为它们永远不会出现在屏幕上,但是绘制调用会消耗一些性能。

      【讨论】:

        猜你喜欢
        • 2016-02-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-06-22
        相关资源
        最近更新 更多