Leo*_*pez 4 java screen libgdx
我是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
.
}
Run Code Online (Sandbox Code Playgroud)
您没有正确使用游戏类.你不应该在那里做任何渲染,这是屏幕的任务.
您应该查看libgdx屏幕和游戏类wiki页面.用法应该是这样的:
public class MyGame extends Game {
@Override
public void create() {
setScreen(new RedScreen(this));
}
}
Run Code Online (Sandbox Code Playgroud)
并有一个像这样的RedScreen:
public class RedScreen implements Screen {
MyGame game;
public RedScreen(MyGame game){
this.game = game;
}
public void render(float delta) {
if(Gdx.input.justTouched())
game.setScreen(new GreenScreen(game);
//render red screen
Gdx.gl.glClearColor(1, 0, 0, 1);
Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
}
// ... more screen functions
}
Run Code Online (Sandbox Code Playgroud)
并拥有这样的GreenScreen:
public class GreenScreen implements Screen {
MyGame game;
public MainMenuScreen(MyGame game){
this.game = game;
}
public void render(float delta) {
//render green screen
Gdx.gl.glClearColor(0, 1, 0, 1);
Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
}
// ... more screen functions
}
Run Code Online (Sandbox Code Playgroud)