ステージ座標 (x,y) を指定して、ユーザーが位置 (x,y) をクリックしたかのように Flash アプリを動作させたいと考えています。つまり、次のようなものです
function simulateClick(x:Number, y:Number):void{
var e:MouseEvent = new MouseEvent(MouseEvent.CLICK, true, false, x, y)
stage.dispatchEvent(e);
}
この種のことについて話しているページをたくさん見つけましたが、それらはすべて上記のような解決策を提供しています。ただし、これはユーザーが (x,y) をクリックすることと同じではありません。2 つの問題があります。
1 つ目は、e.stageX と e.stageY が両方とも 0 であることです。これらを直接設定することはできません。ドキュメントには、e.localXとe.localYが設定されているときに計算されると書かれていますが、e.localXをdispatchEventの前に設定した場合や、イベントリスナーで設定した場合は発生しません。
すべてのイベント リスナーを次のように書き換えることができます。
var p:Point = e.target.localToGlobal(new Point(e.localX, e.localY));
これが唯一のオプションですか?
2 番目の問題は、イベント リスナーがステージ自体ではなく、ステージの子に登録されていることです。したがって、dispatchEvent を呼び出すターゲットを見つける必要があります。明らかに、Flash はターゲットが何であるかを判断できます。つまり、ユーザーが実際にクリックしたときに、位置 (x,y) で表示される最上部のピクセルを所有するオブジェクトを特定できます。この情報を取得する簡単な方法はありますか、それとも同じことを行うために独自の再帰関数を作成する必要がありますか? 現在、DisplayObjectContainer.getObjectsUnderPoint を使用していますが、正しくありません。
それが違いを生むなら、私はFlashDevelopで書いています。