2017-02-22 2 views
0

libgdxでは、screen.setScreen()は自動的にdisposeを自動的に呼び出しません。オーバーライドされたsetScreenの中で、最初にscreen.disposeに電話してからsuper.setScreenに電話するか、後で最初に電話する必要がありますか? これは重複した質問のように思えるかも知れませんが、super.setScreenscreen.hideと呼ばれています。 disposeランタイムセーフの後にhideを呼び出していますか? 悪い習慣ですか? thisthisの例に基づいて3Dゲームを作っています。 は、ここで私はGameGameNameクラスを拡張して、画面がnullでない場合を処分し、その後super.setScreenを呼び出す呼び出すようにsetScreenを上書きしようとしています。使い捨て資産(SpriteBatch、テクスチャ、ステージ、...)のLibGDXのScreen.dispose()の後にScreen.hide()を呼び出すのは安全ですか?

答えて

0

screen.dispose()はLibGDXによって呼び出されることはありません。参照を画面にドロップする前に手動で手動で行う必要があります。 Screenインスタンスを再利用する予定がない場合は、screen.hide()screen.dispose()というコールを使用するのが最適です。

screen.hide()は、Androidのイベントに応じて呼び出されることはありません。

私はあなたが任意の画面のインスタンスを再利用したいことはありません確かに知っていない限り画面を処分するgame.setScreen()を上書きすることはお勧めしません。ほとんどの単純なゲームでは、時間を無駄にしたり、繰り返しアセットをリロードするのではなく、それらを再利用したいと思っています。

0

つのタイプは、一方が異なる画面上で共有され、他の一つは、特定の画面に特異的です。

  1. 共有資産は、ゲームのdispose()メソッドから削除する必要があります。

  2. スクリーン固有のアセットは、dispose()スクリーンのメソッドで処理する必要がありますが、画面のdispose()は呼び出されないため、明示的に呼び出す必要があります。

    あなたがhide()メソッドからdispose()メソッドを呼び出す必要があり、いわゆるスクリーンの画面hide()方法を変更

+0

しかし、Androidのhideは、ユーザーが電話をかけるとゲームがフォーカスを失うと呼び出されます。だから、内部に隠すことを追加するのは悪い考えです。 – Anutrix

+0

@Anutrixスクリーンのhide()メソッドはAndroidのhide()メソッドを呼び出します。両方とも異なる方法です。 – Aryan

+0

@Anutrix、いいえ、それはありません。 'pause()'は、ゲームがフォーカスを失ったときに呼び出されますが、 'hide()'では呼び出されません。 – Tenfour04

関連する問題