画面のイメージと画面上にある一連のボタンで構成されるゲームのオーバーレイがあります。
スクリーンショット:
私Screen
は 1 つ持っていStage
ます。にはStage
一連のGroup
オブジェクトがあり、私はこれをレイヤーと考えています。最初のグループには背景があり、中央のグループにはゲーム要素があり、最前部のグループにはスクリーン オーバーレイがあります。
オーバーレイ レイヤーは、1 つImage
の 、画面自体、および 4 つTextButton
(各コーナーに 1 つ) で構成されます。
オーバーレイレイヤーの画像がその前にある限り、ゲームレイヤーの何もクリックできないという事実がなければ、これはうまく機能します。画像が透明であっても、ゲーム レイヤーに到達する前にすべてのタッチ イベントを傍受します。
だから私の質問は次のとおりです:ゲームレイヤーがそれらを取得し、実際にゲームをプレイできるように、オーバーレイレイヤーの画像にすべてのタッチイベントを無視させるにはどうすればよいですか?
私は自分で1つのアイデアを試しましたが、これが正しい方法であるかどうかはわかりません.高さ/幅を常に0に設定
するカスタムとして画像を作成しようとしましたActor
が、それでも( draw() メソッドをオーバーロードすることにより)画面全体に絵を描きました。これは非常にうまく機能しますが、何らかの理由で画像が下位レイヤーの要素の背後に描画されるという事実を除きます。
スクリーンショット: https://dl.dropboxusercontent.com/u/1545094/Screen2.png
このスクリーンショットでは、ゲーム レイヤーの 1 つ (グループ 6) に追加される指示メッセージ ボックスを開きました。オーバーレイ レイヤー (グループ 7) のすべてのボタンはメッセージ ボックスの前にありますが、スクリーン フレーム (カスタム アクター) は何らかの方法でメッセージ ボックスの後ろに描画されることに注意してください。何故ですか?注: これとまったく同じケースを取り上げて、カスタム アクターを通常の画像に変更すると、すべてが正しく描画されますが、上記のように、下のレイヤーでは何もクリックできなくなります。
誰かがそれを理解できるなら、これは私のカスタム アクターです。
public class ClickThroughImage extends Actor {
BaseDrawable d;
public NonexistingImage(BaseDrawable d){
this.d = d;
setSize(0, 0);
}
@Override
public void draw(SpriteBatch batch, float parentAlpha) {
d.draw(batch, 0, 0, 1024, 768); //Yes, I tried swapping these two lines.
super.draw(batch, parentAlpha); //It had no effect.
}
}