4

私は Libgdx を初めて使用し、Game クラスを拡張するクラスを作成しました。問題は、Game の setScreen() メソッドが画面を交換していないことです。これは、画面を設定した後も、ゲームは render メソッドにあるものだけをレンダリングするためです。画面クラスのrenderメソッドにあるものではなく、ゲームクラスからのものです。これはコードです:

このコードを実行すると、ユーザーが画面に触れた (クリックした) ときに画面を変更しても、赤い画面しか表示されません

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
     .
}
4

3 に答える 3

8

ゲームクラスを適切に使用していません。そこでレンダリングを行うべきではありません。それはスクリーンのタスクです。

libgdx 画面とゲーム クラスの wiki ページを確認してください。使用法は次のようにする必要があります。

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

次のような 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
}

次のような 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
}
于 2012-07-25T13:46:26.640 に答える
5

問題を解決するには、ゲーム クラスの render メソッドを使用しないことです。実際には、クラスから削除する必要があります。他の画面クラスですべてのレンダリングを行う必要があると思います。

于 2012-07-25T20:13:14.680 に答える
3

根本的な原因を見つけました。実際には、ゲームで他のものを描画する前super.render()に、ゲームのメソッドを追加する必要があります。render()そうでない場合、オーバーライドした render メソッドは Screen のrender()メソッドを呼び出しません。

ところで: ベスト プラクティスは、クラス Screen を使用してレンダリングすることです。

以下に注意してください: ゲームが空render()であっても、この問題が発生します。したがって、ゲームを削除するrender()か、ゲームに追加super.render()してください。

于 2013-11-29T07:56:44.653 に答える