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

Libgdx屏幕未交换

贺自明
2023-03-14

我是Libgdx新手,我编写了一个扩展游戏类的类,问题是游戏中的setScreen()方法没有交换屏幕,因为在我设置屏幕之后,我的游戏仍然只渲染游戏类中渲染方法中的内容,而不是screen类的渲染方法中的内容。代码如下:

如果用户运行此代码,即使在用户触摸(单击)屏幕时更改屏幕,我也只会看到一个红色屏幕

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个答案

邵鸿福
2023-03-14

我找到了根本原因。实际上,在游戏中绘制其他东西之前,您必须在游戏的渲染方法中添加super.render()。如果没有,您重写的呈现方法将不会调用屏幕的呈现()方法。

顺便说一句:最佳实践是使用类屏幕渲染东西。

请注意:游戏中即使是空的render(),也会导致此问题。因此,在游戏中删除render(),或添加super。在其中渲染()

罗兴运
2023-03-14

发现问题的解决办法是不使用游戏类中的render方法事实上你必须从类中删除它相信我你必须在其他屏幕类中进行所有渲染。

南门正业
2023-03-14

你没有正确使用游戏类。你不应该在那里做任何渲染,那是屏幕的任务。

你应该看看libgdx屏幕和游戏类维基页面。用法应该是这样的:

public class MyGame extends Game {
        @Override
        public void create() {
                setScreen(new RedScreen(this));              
        }
 }

有一个这样的红屏:

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
}

并且有这样的绿色屏幕:

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
}
 类似资料:
  • 多亏了我在这个论坛上解决其他问题的帮助,我成功地推进了我的项目,但另一个障碍出现在我的道路上。 我有麻烦在libgdx java实现多个屏幕。我想知道如何实现多个屏幕(一个用于主菜单,一个用于播放,一个用于加载屏幕,...)。 关于我应该如何构造我的屏幕类的一个例子或一些解释将非常有帮助。我试着实现我自己的屏幕管理器,但不太顺利...还有一些关于我应该如何处理屏幕的提示,因为每次从主菜单到播放或选

  • 在libGDX中切换屏幕似乎有问题。它会切换到游戏屏幕,但不会切换回主屏幕,也不会切换到屏幕上的游戏。我的游戏课: 我的GameScreen类(实现屏幕): 这就是我如何更改屏幕(不工作): 你可以在这里找到全部来源。

  • 我在我的LibGDX项目中遇到了这个问题,我基本上无法加载我的游戏屏幕,我正在关注一个YouTube教程(链接到我所在的特定教程:https://www.youtube.com/watch?v=LSblkR4K1LU),我发现我的精灵应该出现在我的屏幕上,只是它根本不会加载,它只是打开,关闭然后弹出这个:http://puu.sh/coxUv/d877d08a83.png,我承认我从视频中唯一改变

  • 问题内容: 大家好,我仍在从事这个libgdx项目的工作,我试图找出将屏幕切换到游戏屏幕的最佳方法。现在,当单击一个按钮时,我需要它来切换到游戏屏幕。我已经看到了一些扩展游戏类的实现方式,但是我不确定这里最好的方法是什么。如果您看到一些可以改进的代码,请告诉我。 这是主要的应用程序类: 问题答案: 这就是我始终执行屏幕切换的方式: 首先,主类需要扩展Game(From ),然后您需要具有一个新的t

  • 我试图改变Libgdx屏幕之间的动画。我想写我的自定义动画(淡入淡出等)。有人能给我个线索吗?我似乎在Libgdx代码中找不到转换的实现。

  • 大家好,我仍然在做这个libgdx项目,我正在努力找出最好的方法来改变我的游戏屏幕现在,当一个按钮被点击时,我需要它转换到游戏屏幕。我见过一些扩展game类的实现,但我不确定从这里开始最好的方法是什么。如果你看到一些可以改进的代码,请让我知道。 以下是主要的应用程序类: