当前位置: 首页 > 知识库问答 >
问题:

libGdx:有舞台时不画雪碧

能正青
2023-03-14

我肯定我错过了一些非常明显的东西,但我是初学者,所以请不要压碎我。我的问题是我有一个视口比屏幕小的舞台。现在我也想直接用Sprite.draw(SpriteBatch)在屏幕上画一个雪碧。雪碧和舞台的位置不重叠。舞台画得很好,但是雪碧看不见。当我注释掉渲染方法中的stage.draw()部分时,雪碧是可见的。

代码:这是我的渲染方法:

@Override
public void render(float delta) {
    Gdx.gl.glClearColor(0.851f, 0.894f, 0.992f, 1f);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
    camera.update();

    stage.act(delta);

    batch.setProjectionMatrix(camera.combined);
    batch.begin();
    stage.draw();
    logoSprite.draw(batch);
    batch.end();
}

在这里,我初始化相机和舞台(StalleHeight是一个int,只有屏幕高度的3/5*):

camera = new OrthographicCamera();
    camera.setToOrtho(false, SwapItGame.WIDTH, SwapItGame.HEIGHT);
    stage = new Stage();
    stage.setViewport(1080, stageHeight, true, 0, 0, 1080, stageHeight); //The button part of the menu takes up 3 fifth of the Height of hte screen
    stage.setCamera(camera);

这里我初始化我的雪碧(雪碧的位置值相当复杂,忽略它即可。它肯定在舞台之上):

        logoSprite = skin.getSprite("logo");
        logoSprite.setPosition((SwapItGame.WIDTH-logoSprite.getWidth())/2, (SwapItGame.HEIGHT-stageHeight-logoSprite.getHeight())/2 + stageHeight);

在同一个屏幕上有一个精灵和一个舞台是不可能的吗?还是我做错了什么?

共有2个答案

乐正翰
2023-03-14

我知道这很古老,但如果你不能或不想移动你的舞台。draw()方法,只需调用批处理。就在舞台前结束。draw(),然后立即重新启动批处理。。。我在游戏中对不同的东西使用不同的游戏屏幕状态,并试图移动我的舞台。draw(),它只会破坏我班上的其他东西,所以我终于尝试了这个,它很有魅力,如果上述解决方案不容易奏效,它可能会对某人有所帮助。

batch.end();
stage.draw();
batch.begin();
狄旭
2023-03-14

试着搬家

stage.draw();

以上批量操作

stage.draw();
batch.setProjectionMatrix(camera.combined);
batch.begin();
logoSprite.draw(batch);
batch.end();
 类似资料:
  • 创建Pixi应用和 舞台 现在你可以开始使用Pixi! 但是怎么用? 第一步就是去创建一个可以显示图片的矩形显示区。Pixi拥有一个Pixi应用对象来帮助你创建它。它会自动创建一个<canvas>HTML标签并且计算出怎么去让你的图片在这个标签中显示。你现在需要创建一个特殊的Pixi容器对象,他被称作舞台。正如你所见,这个舞台对象将会被当作根容器而使用,它将包裹所有你想用Pixi显示的东西。 这里

  • 我对游戏编程相当陌生,刚刚开始考虑用libgdx构建我的第一个2d游戏。我已经搭建了一个舞台,演员们被吸引到屏幕上,通过动作、寻路等等。但是,当我创建几个阶段时,对于“Stage”类的用法,我有点困惑。最好的解决方案是只为所有扩展Stage的每个级别创建类,还是不需要,最好的解决方案是为每个级别创建类,并在其中包含一个Stage对象?希望这个问题不要太混乱,提前谢谢!

  • 问题内容: 我正在JavaFx中创建一个应用程序,如果要打开任何子阶段,则应在其中进行操作,然后应在父阶段的中心打开它。我正在尝试使用它来执行此操作,但是它将子级分配到屏幕的中心,而不是父级的中心。如何将子阶段分配给父阶段的中心? 问题答案: 您可以使用父级的X / Y / width / height属性来执行此操作。除了使用,您可以执行以下操作:

  • 问题内容: 我要说的很对,因为我的英语不太流利,对不起。 我正在学习javafx,想要在关闭后单击X的窗口时出现警告。我知道可以通过我在窗口中间创建的按钮来执行此操作,但是我不知道如何控制用户何时按下X来关闭程序。谢谢 问题答案: 您不应该关注X,而应该关注像这样的通用关闭请求:

  • 问题内容: 我目前正在使用两个控制器类。 在Controller1中,它创建一个新的阶段,该阶段在主要阶段的顶部打开。 现在,一旦该阶段打开,我希望它在关闭之前保持打开状态约5秒钟。 在Controller2中,我尝试实现类似 但是我不知道在while循环中放入什么来关闭它。我已经尝试了各种方法,但没有任何效果。 问题答案: 使用: