【发布时间】:2020-10-28 06:34:23
【问题描述】:
我正在尝试绘制一个Sprite,但是当我第一次运行我的程序时它只出现一个框架,然后立即消失。我正在使用一个Stage、一个平铺地图和两个Batches,我希望这不是问题。
看起来精灵隐藏在其他东西后面,但我完全确定它后面没有任何东西被绘制。因此,经过长时间的折腾,我发现删除 setProjectionMatrix() 方法“解决了”我的问题,因为精灵以某种方式完美显示。
我完全不明白发生这种情况的原因,我不想只是删除该方法并让精灵跟随相机,所以:
为什么或如何使用 setProjectionMatrix() 方法“隐藏”Sprite?它是否改变了我的精灵绘制的顺序?最重要的是,我该如何解决?
这是我的render 方法:
public void render(float delta) {
Render.cleanScreen(); //Render is a class i made with useful static stuff, like the Batch i am using.
//This method is pretty much just a Gdx.gl.glClearColor() method.
tmr.setView(camera); // tileMapRenderer
tmr.render();
b2dr.render(world, camera.combined); // Box2DDebugRenderer
stage.act();
stage.draw();
Render.batch.begin();
sprite2.draw(Render.batch); //The sprite i want to draw
Render.batch.end();
hudBatch.begin();
sprite1.draw(hudBatch); //This works fine
hudBatch.end();
Render.batch.setProjectionMatrix(camera.combined);
Gdx.input.setInputProcessor(stage);
}
编辑:有人要求提供额外信息,所以:
• This 是我的游戏使用 setProjectionMatrix 时的样子(在 Sprite 消失的第一帧之后),this 是我删除它时的样子。您可以清楚地看到红色方块(Sprite)。
• 我目前正在使用 FitViewport。
【问题讨论】:
-
camera是舞台使用的同一个相机实例吗? -
是的,是同一台相机。
-
投影矩阵不会改变绘制顺序,但理论上它可以将你的精灵绘制在其他精灵之后,如果它已经在 Z 方向移动并且深度测试开启(它应该'不是如果你没有打开它)。但如果是你在各处使用的同一台相机,并且你没有修改它的参数,那也不可能。
-
比较使用和不使用投影矩阵的屏幕截图可能会有所帮助。并知道您正在使用哪个视口。
-
您说 Sprite 看起来像是隐藏在其他东西后面,但在我看来,它似乎什么都没有显示?那正确吗?您的 FitViewport 尺寸是否恰好与窗口尺寸匹配?否则我无法想象在不使用相机时如何将 Sprite 绘制在您期望的位置。