2009-08-21 9 views
1
私はこれは本当に奇妙な状況、私はこのバーを持っていると私はそれにaddEventListenerを、そのバーのクリックされたとき 、奇妙なことがあるlocalXプロパティ

AS3のMouseEvent localXプロパティ演技奇妙な

private function _barClicked($e:MouseEvent):void { 
     trace($e.localX) 
} 

をトレースに遭遇し

、その時にクリックしたとき同じ場所、ときどき間違った番号にジャンプする 私はなぜ、私はバーの幅をトレースし、それは正しい値です、ローカルXは ちょうど私に乱数を与えるです。誰もこの問題に遭遇したことはありますか?ありがとう!

答えて

6

うーん、奇妙な

私は「バー」という名前の四角形を持っている簡単なシナリオを試してみましたが、MOUSE_DOWNイベントを試してみました、その後、クリックイベントのためにあなたのリスナーを貼り付けました。どちらもうまくいった。 ランダムな値を取得しませんでした。

私の推測では、あなたのバークリップが内部に他のオブジェクトが含まれていて、あなたが自分自身をバーではない、バーの子どもたちから値を取得する可能性がありますです。確かに、それは単なる推測です。

あなたは自分の価値観がe.targetがに応じて変更される場合があります$と$ e.currentTargetから来ていることを確認しようとすることができます:あなたのクリップとどのように多くの子供たちには、クリックしてイベント相の位置を保持しています。

private function _barClicked($e:MouseEvent):void { 
     trace($e.currentTarget.mouseX); 
} 

を試してみて、それが役に立てば幸い!

+4

私はこのシナリオに遭遇しました。ジョージが指摘した理由があったからです。しかし、同僚は、マウスの位置が、イベントの時刻とcurrentTargetでmouseXを照会する時刻との間に移動している可能性があることを指摘しました。したがって、イベントが発生した正確な位置を知る必要がある状況では、e.currentTarget.globalToLocal(new Point(e.stageX、e.stageY))を使用してローカル座標を計算する方が良いです。 –

2

私は同じ問題を抱えていた、そして上記のコメントからKevin Condonソリューションは、私の問題を助けました。私はコメントにそれを忘れてしまったので、ここに投稿しています。

private function _barClicked($e:MouseEvent):void { 
    var coord:Point = $e.currentTarget.globalToLocal(new Point($e.stageX, $e.stageY)); 
    trace(coord.x); 
} 

ありがとうKevin。

2

ただ誰のために上記のそれらのため、この問題のバリエーションが機能していないに注意したいです。

私は同じ問題を抱えていました - ローカルXは奇数値を示していました。私のものは無作為ではなく、私が予想していたものよりはるかに低かった。つまり、スプライトの右端をクリックして、幅が160と報告されているにもかかわらず、イベントは17.2にしかなりません。

私のインスタンスは、ネイティブの幅がはるかに小さいシンボルのスケーリングされたバージョンでした。

シンボルとインスタンスが同じ幅を持っていたように私はそれを設定したら、私は右の値を取得し始めました。

これは誰かを助けることを望みます。

1

が見つかった場合限り、私は別のシンボル間のスケーリングでKevin Condon提案の違いを考慮すると、すべてがうまくうまくいくソリューションを使用しています。

関連する問題