我是Libgdx的新手,我写了一个扩展Game类的类,事实是来自Game的setScreen()方法没有交换屏幕,因为在我设置屏幕之后我的游戏仍然只渲染渲染方法中的内容从游戏类而不是屏幕类的渲染方法中的内容 . 这是代码:
如果运行此代码,即使我在用户触摸(点击)屏幕时更改屏幕,我也只会看到红色屏幕
class myGame extends Game
{
GameScreen myOtherScreen;
public void create()
{
//create other screen
myMenuScreen = new GameScreen();
}
public void render(float delta)
{
// change screens if screen touched
if(Gdx.input.justTouched())
setScreen(myOtherScreen);
//render red screen
Gdx.gl.glClearColor(1, 0, 0, 1);
Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
}
.
. //other methods
.
}
// ======= Screen Class ========
public class GameScreen implements Screen
{
@Override
public void render(float delta)
{
//render green screen
Gdx.gl.glClearColor(0, 1, 0, 1);
Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
}
.
. //other methods
.
}
3 回答
您没有正确使用游戏类 . 你不应该在那里做任何渲染,这是屏幕的任务 .
你应该看看libgdx screen and game classes wiki page . 用法应该是这样的:
并有一个像这样的RedScreen:
并拥有这样的GreenScreen:
发现问题的解决方案是不使用游戏类中的render方法实际上你实际上必须从类中删除它相信我你必须在其他屏幕类中进行所有渲染 .
我找到了根本原因 . 实际上,在Game中绘制其他内容之前,必须在Game的
render()
方法中添加super.render()
. 如果没有,您覆盖的渲染方法将不会调用Screen的render()
方法 .顺便说一句:最好的做法是使用类Screen渲染东西 .
请注意:即使游戏中的空
render()
也会导致此问题 . 因此,在游戏中删除render()
或在其中添加super.render()
.