AndEngine —新しいスプライトエンティティのアタッチに問題があります
-
27-10-2019 - |
質問
私は何時間も試行錯誤を繰り返してきましたが、単純に思える解決策をまだ思い付いていません。 を使用しています ジェネラコディセタグプレ
ユーザーが画面の向きを変更したかどうかを検出する方法。 最終的に、エンティティがシーンにアタッチされるこのメソッドに送信されます: ジェネラコディセタグプレ
このメソッドは、壁紙が最初に作成されたとき、およびユーザーが画面の向きを変更したときに呼び出されます。
これを携帯電話でテストしましたが、向きを切り替えるとログメッセージが正常に表示されます。つまり、希望どおりに動作しています。
問題-
このメソッドが呼び出されても、スプライトの子は切り離されません。ポートレートモードでランドスケープに切り替えた場合、ポートレートスプライトは残り、非表示にします。その逆も同様です。
誰かがこれに答えてくれたら、私は非常に嬉しいです。私はおそらく20時間これについて頭痛を抱えています。
解決
問題はロジックにあるようです。SpriteDayPortraitとSpriteDayLanscapeを再割り当てしてから、ブランチを呼び出して、それらをデタッチまたはアタッチします。
したがって、デタッチスクリプトが呼び出されるたびに、デタッチする古いインスタンスではなく、スプライトの新しいインスタンスが参照されます。
スプライトの割り当てを、シーンの作成時にのみ呼び出される別の関数に移動してみてください: ジェネラコディセタグプレ
他のヒント
AndEngineでの向きの変更は存在しないため(エンジンの向きを変更することは許可されていません)、ゲームで向きの変更を使用しないようにする必要があります(これはユーザーにとって奇妙なことです)。
とにかく、onConfigurationChanged
はUIスレッドから呼び出されるため、AndEngineのオブジェクトを操作するのではなく、UpdateThreadで操作する必要があります。問題が発生する可能性があります(ただし、問題が発生した場合はゲームがクラッシュします)。変更してください。
新しい背景を設定する前にParallaxBackground
をクリアしなかったために発生したと思います(おそらく、古い背景が新しい背景を隠しているのでしょうか?)
最後のParallaxEntity
への参照を保持し、新しいコードを追加する前にバックグラウンドから削除します。