Java Can';t开关屏幕[Libgdx]
我是libgdx新手,我不知道我做错了什么。 在我的游戏中,我只想在2个Java Can';t开关屏幕[Libgdx],java,android,libgdx,Java,Android,Libgdx,我是libgdx新手,我不知道我做错了什么。 在我的游戏中,我只想在2个screens之间切换(第一个是菜单屏幕,第二个是游戏屏幕)。我已经创建了两个screens和一个游戏类,看起来都不错。但是当我调用我的方法setScreen(newgamescreen())时,什么都没有发生。我还应该说,我在以前的项目中使用了screen和game类,一切正常,当我将当前代码与以前的代码进行比较时,我看不到任何差异,因此非常奇怪 这是我的MenuScreen课程: MenuScreen implement
screen
s之间切换(第一个是菜单屏幕,第二个是游戏屏幕)。我已经创建了两个screen
s和一个游戏类,看起来都不错。但是当我调用我的方法setScreen(newgamescreen())
时,什么都没有发生。我还应该说,我在以前的项目中使用了screen
和game
类,一切正常,当我将当前代码与以前的代码进行比较时,我看不到任何差异,因此非常奇怪
这是我的MenuScreen
课程:
MenuScreen implements Screen {
private SpriteBatch batch ;
private Texture texture;
private float timePassed;
public MenuScreen() {
timePassed = 0;
batch = new SpriteBatch();
texture = new Texture("texture.png");
@Override
public void render (float delta) {
timePassed += Gdx.graphics.getDeltaTime();
Gdx.gl.glClearColor(1, 0, 0, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
if (timePassed > 5) {GameClass.getInstance().setScreen(new GameScreen());} //it looks strange, but it's to check if all works properly
batch.begin();
batch.draw(texture, 0, 0);
batch.end();
}
@Override
public void dispose() {
batch.dispose();
texture.dispose();
}
@Override
public void hide() {
}
@Override
public void resume() {
}
@Override
public void pause() {
}
@Override
public void resize(int width, int height) {
}
@Override
public void show() {
}}
GameScreen implements Screen {
private SpriteBatch batch2 ;
private Texture texture2;
public MenuScreen() {
batch2 = new SpriteBatch();
texture2 = new Texture("texture2.png");
}
@Override
public void render (float delta) {
Gdx.gl.glClearColor(1, 0, 0, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
batch2.begin();
batch2.draw(texture2, 0, 0);
batch2.end();
}
@Override
public void dispose() {
batch2.dispose();
texture2.dispose();
}
@Override
public void hide() {
}
@Override
public void resume() {
}
@Override
public void pause() {
}
@Override
public void resize(int width, int height) {
}
@Override
public void show() {
}}
public class ClassGame extends Game {
public static ClassGame getInstance(){
ClassGame instance = new ClassGame();
return instance;
}
@Override
public Screen getScreen() {
return super.getScreen();
}
@Override
public void setScreen(Screen screen) {
super.setScreen(screen);
}
@Override
public void resize(int width, int height) {
super.resize(width, height);
}
@Override
public void render() {
super.render();
}
@Override
public void resume() {
super.resume();
}
@Override
public void pause() {
super.pause();
}
@Override
public void dispose() {
super.dispose();
}
public ClassGame() {
super();
}
@Override
public void create() {
MenuScreen menuScreen = new MenuScreen();
setScreen(menuScreen);
}}
这是我的GameScreen
课程:
MenuScreen implements Screen {
private SpriteBatch batch ;
private Texture texture;
private float timePassed;
public MenuScreen() {
timePassed = 0;
batch = new SpriteBatch();
texture = new Texture("texture.png");
@Override
public void render (float delta) {
timePassed += Gdx.graphics.getDeltaTime();
Gdx.gl.glClearColor(1, 0, 0, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
if (timePassed > 5) {GameClass.getInstance().setScreen(new GameScreen());} //it looks strange, but it's to check if all works properly
batch.begin();
batch.draw(texture, 0, 0);
batch.end();
}
@Override
public void dispose() {
batch.dispose();
texture.dispose();
}
@Override
public void hide() {
}
@Override
public void resume() {
}
@Override
public void pause() {
}
@Override
public void resize(int width, int height) {
}
@Override
public void show() {
}}
GameScreen implements Screen {
private SpriteBatch batch2 ;
private Texture texture2;
public MenuScreen() {
batch2 = new SpriteBatch();
texture2 = new Texture("texture2.png");
}
@Override
public void render (float delta) {
Gdx.gl.glClearColor(1, 0, 0, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
batch2.begin();
batch2.draw(texture2, 0, 0);
batch2.end();
}
@Override
public void dispose() {
batch2.dispose();
texture2.dispose();
}
@Override
public void hide() {
}
@Override
public void resume() {
}
@Override
public void pause() {
}
@Override
public void resize(int width, int height) {
}
@Override
public void show() {
}}
public class ClassGame extends Game {
public static ClassGame getInstance(){
ClassGame instance = new ClassGame();
return instance;
}
@Override
public Screen getScreen() {
return super.getScreen();
}
@Override
public void setScreen(Screen screen) {
super.setScreen(screen);
}
@Override
public void resize(int width, int height) {
super.resize(width, height);
}
@Override
public void render() {
super.render();
}
@Override
public void resume() {
super.resume();
}
@Override
public void pause() {
super.pause();
}
@Override
public void dispose() {
super.dispose();
}
public ClassGame() {
super();
}
@Override
public void create() {
MenuScreen menuScreen = new MenuScreen();
setScreen(menuScreen);
}}
和游戏
课程:
MenuScreen implements Screen {
private SpriteBatch batch ;
private Texture texture;
private float timePassed;
public MenuScreen() {
timePassed = 0;
batch = new SpriteBatch();
texture = new Texture("texture.png");
@Override
public void render (float delta) {
timePassed += Gdx.graphics.getDeltaTime();
Gdx.gl.glClearColor(1, 0, 0, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
if (timePassed > 5) {GameClass.getInstance().setScreen(new GameScreen());} //it looks strange, but it's to check if all works properly
batch.begin();
batch.draw(texture, 0, 0);
batch.end();
}
@Override
public void dispose() {
batch.dispose();
texture.dispose();
}
@Override
public void hide() {
}
@Override
public void resume() {
}
@Override
public void pause() {
}
@Override
public void resize(int width, int height) {
}
@Override
public void show() {
}}
GameScreen implements Screen {
private SpriteBatch batch2 ;
private Texture texture2;
public MenuScreen() {
batch2 = new SpriteBatch();
texture2 = new Texture("texture2.png");
}
@Override
public void render (float delta) {
Gdx.gl.glClearColor(1, 0, 0, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
batch2.begin();
batch2.draw(texture2, 0, 0);
batch2.end();
}
@Override
public void dispose() {
batch2.dispose();
texture2.dispose();
}
@Override
public void hide() {
}
@Override
public void resume() {
}
@Override
public void pause() {
}
@Override
public void resize(int width, int height) {
}
@Override
public void show() {
}}
public class ClassGame extends Game {
public static ClassGame getInstance(){
ClassGame instance = new ClassGame();
return instance;
}
@Override
public Screen getScreen() {
return super.getScreen();
}
@Override
public void setScreen(Screen screen) {
super.setScreen(screen);
}
@Override
public void resize(int width, int height) {
super.resize(width, height);
}
@Override
public void render() {
super.render();
}
@Override
public void resume() {
super.resume();
}
@Override
public void pause() {
super.pause();
}
@Override
public void dispose() {
super.dispose();
}
public ClassGame() {
super();
}
@Override
public void create() {
MenuScreen menuScreen = new MenuScreen();
setScreen(menuScreen);
}}
我明白了,伙计们。在我以前的项目中,我在getInstance()之外声明了
instance
字段。像这样:
public static GameClass instance = new GameClass();
public static GameClass getInstance(){
return instance;
}
但我仍然需要你的帮助。我不知道这个小东西怎么不让我切换屏幕。我就是这样解决同样的问题的,我上了三节课,两个屏幕在它们之间切换。在这里,我使用一个图像参与者作为按钮在第二个和第三个之间切换。我还在每个类中使用了两个构造函数,其中一个是没有参数的构造函数,下面是我的代码,希望您能得到它。 我的主要班级代码:
public class First extends Game{
private Game game;
public Main(){ game=this; }
public void create() {
game.setScreen(new Second(game)); }}
下面是我的第一个屏幕类代码
public class Second implements Screen{
private Game second;
public Second(Game second){this.second=second;}
public Second(){}
// your code
Stage myStage=new Stage(new ScreenViewport());
Group myGroup=new Group();
Image secondButton=new Image(new Texture(Gdx.files.internal("image.png")));
public void show(){
myGroup.addActor(secondButton);
secondButton.addListener(new InputListener(){
second.setScreen(new Third(second)); });}
public void render(float delta) {
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
myStage.act(Gdx.graphics.getDeltaTime());
myStage.draw(); }
public void resize(int width, int height) {}
public void pause(){}
public void resume(){}
public void hide(){}
public void dispose(){}}}
public class Third implements Screen{
private Game third;
public Third(Game third){
this.third=third;}
public Third(){}
// your code
Stage myStage=new Stage(new ScreenViewport());
Group myGroup=new Group();
Image thirdButton=new Image(new Texture(Gdx.files.internal("image.png")));
public void show() {
myGroup.addActor(thirdButton);
thirdButton.addListener(new InputListener(){
third.setScreen(new Third(third));});}
public void render(float delta) {
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
myStage.act(Gdx.graphics.getDeltaTime());
myStage.draw();}
public void resize(int width, int height) { }
public void pause(){}
public void resume(){}
public void hide(){}
public void dispose(){}}}
还有我的下一个屏幕类代码
public class Second implements Screen{
private Game second;
public Second(Game second){this.second=second;}
public Second(){}
// your code
Stage myStage=new Stage(new ScreenViewport());
Group myGroup=new Group();
Image secondButton=new Image(new Texture(Gdx.files.internal("image.png")));
public void show(){
myGroup.addActor(secondButton);
secondButton.addListener(new InputListener(){
second.setScreen(new Third(second)); });}
public void render(float delta) {
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
myStage.act(Gdx.graphics.getDeltaTime());
myStage.draw(); }
public void resize(int width, int height) {}
public void pause(){}
public void resume(){}
public void hide(){}
public void dispose(){}}}
public class Third implements Screen{
private Game third;
public Third(Game third){
this.third=third;}
public Third(){}
// your code
Stage myStage=new Stage(new ScreenViewport());
Group myGroup=new Group();
Image thirdButton=new Image(new Texture(Gdx.files.internal("image.png")));
public void show() {
myGroup.addActor(thirdButton);
thirdButton.addListener(new InputListener(){
third.setScreen(new Third(third));});}
public void render(float delta) {
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
myStage.act(Gdx.graphics.getDeltaTime());
myStage.draw();}
public void resize(int width, int height) { }
public void pause(){}
public void resume(){}
public void hide(){}
public void dispose(){}}}
这行得通吗?我写了一封回复信,但不得不离开工作。如果你仍然不明白,我将在明天用代码回答:基本上你的GameClass是控制游戏并决定做什么的人,但在你的屏幕内,你调用getInstance()返回一个新的GameClass,而不是控制游戏的人,所以你可能不会看到任何事情发生。希望不会造成更大的混乱