3

starling-layer (ゲーム自体) と、いくつかの Popups とそのようなものを含む従来の表示リストを使用するゲームを作成しています。

問題が 1 つあります。displayList 要素で MouseEvents が生成されると、それらは常にスターリング レイヤーを通過し、TouchEvents などを生成します。これは非常に面倒です。

それを処理するための一般的な(そして使いやすい)アプローチがあるのだろうかと思っていました。

1 つの可能性は、次のイベントのすべての displayList-Elements をリッスンすることでした。

interfaceElement.addEventListener(MouseEvent.MOUSE_MOVE, stopPropagationHandler);
interfaceElement.addEventListener(MouseEvent.MOUSE_DOWN, stopPropagationHandler);
interfaceElement.addEventListener(MouseEvent.MOUSE_UP, stopPropagationHandler);

private function stopPropagationHandler(e:MouseEvent):void {
    e.stopPropagation();
}

しかし、これは私にはかなり厄介に見えます。そして、そのようにしたとしても、もう1つ問題があります。スターリング要素がそのdisplay-list-要素の下にあり、ロールオーバー動作のTouchEvent.TOUCHがある場合>>ロールオーバーの外観は削除されませんdisplay-list-element にカーソルを合わせると、ムクドリから。

イベントを停止するために、すべての display-list-element の後ろにダミースターリング要素を配置することも考えました..しかし、そのような「単純な」タスクに対しては、すべてが少し「複雑すぎる」ように聞こえます。または、何か不足していますか?

ヒントをいただければ幸いです。ありがとう。

4

1 に答える 1

1

ディスプレイリスト (ステージではない) に 1 つのメイン コンテナを作成し、ROLL_OVER と ROLL_OUT をリッスンし、マウスがディスプレイ リスト コンテナ上にあることを示す何らかのグローバル フラグをそこに設定できます。次に、スターリング イベントで、このフラグを確認します。これは私が推測する最も良い解決策ではありませんが、うまくいくはずです

var isOverDisplayList:Boolean = false;
container.addEventListener(MouseEvent.ROLL_OVER, onRollOver);
container.addEventListener(MouseEvent.ROLL_OUT, onRollOut);

function onRollOver(e:MouseEvent) {
  isOverDisplayList = true;
}

function onRollOut(e:MouseEvent) {
  isOverDisplayList = false;
}
于 2013-06-25T10:29:23.300 に答える