2013-10-15 10 views
7

Libgdxで画面を完全に処分する適切な方法は何ですか?現在、私が前の画面にボタンがあった場所をクリックすると、その画面上にあれば、ボタンはまだやることができます。 .dispose() - dispose()メソッドでできることは何ですか?または画面上にすべてを廃棄する簡単な方法がありますか?Libgdxで画面を適切に廃棄する方法

答えて

17

残念ながら、より簡単な方法はありません。これらのクラスは、それを自動的に行うための共通の "Disposable"インターフェイスなどを共有しません。 dispose()メソッドを持つものは、それがもはや必要でないときは手動で処分する必要があります。

これはScreensでも有効です。 Screensを切り替えると自動的に処理されませんが、自分で処理する必要があります(Game.setScreen()に電話する前に)。

一方、これは大きな問題ではありません。あなたのScreenのすべてを調べて、それを廃棄するかどうかを確認してください。 disposeメソッドがある場合はScreendispose()で呼び出します。

しかし、これは最後のScreenの目に見えないボタンについてのあなたの行動を説明していません。 Stageを使用し、Gdx.input.setInputProcessor(stage);を使用したとします。この設定は、画面を変更したときに変更されず、入力プロセッサーを現在のScreenStage、または現在のScreenの入力を処理するものに設定する必要があります。そうすることで、「古い」段階では入力を一切取得できなくなります。

+0

?どうすればそれらを扱うことができますか? – Chris

+0

@ user2341336正確にどの変数を意味していますか?私はスクリーンに論理的に属しているので、Screenクラスに配置する必要があるほとんどのものをScreenクラス自身のプライベートプロパティとして保持します。 – noone

2

この問題は、インプルプロセッサに新しい段階を渡していないことが確認できます。これは、説明したように「ゴースト」ボタンになります。

0

は残念ながらLibGDX API documentation処分

注()が自動的に呼び出されていないと言います。

だから私はhide()が自動的に呼び出され、それは非常にうまく機能しているので、画面内hide()メソッド内のすべての使い捨て(のようなStageSkinTexture ...等)を配置されて何をすべきか!

例:すべての変数については

public class GameScreen implements Screen { 
... 
    @Override 
    public void hide() { 
     mainStage.dispose(); 
     playGroundStage.dispose(); 
     controller.dispose(); 
     labelActor.dispose(); 
    } 
... 
} 
+1

誰かがあなたに電話をかけたらアンドロイドで呼び出されるので、hide()メソッドの中に物を置くことはお勧めしません –

関連する問題