1

Flex 2 アプリケーションを開発していますが、クリック可能な ( ) スプライトが下にあると、GUI ウィンドウTitleWindowをマウスでドラッグしたときに移動するライブラリの一部が混乱することに気付きました。buttonMode = true混乱しているというのは、ウィンドウがしばらくの間正常に動き回っていたが、ある時点で Flash アプリの左上隅に「ジャンプ」し、そこで非常に小さな動きをしたことを意味します。その後、別の時点で元に戻ります。体験するよりも説明する方が難しいので、ぜひ行ってみてください。問題を再現する方法は次のとおりです。

  1. http://www.panocast.comに移動します
  2. 左側のサイドバーで、「不動産」を選択します
  3. フラッシュ ウィンドウの右下隅のすぐ下にある、一番右のアイコンをクリックして [高解像度] を選択します。
  4. ビデオ (の一部) が読み込まれたら、階段をクリックします。TitleWindow がポップアップします。
  5. 画面上でドラッグしてみてください。クリック可能な領域 (階段など) の上にマウス カーソルを移動すると、ウィンドウの位置がずれます。

(申し訳ありませんが、直接リンクを提供することはできません。ページの一部は動的に生成されます。)

(問題をさらに興味深いものにしているのは、私にとって「低解像度」モードでは問題が発生しないことです!さまざまなモードの間にほとんど違いはありません。)誰かがここで何が起こっているのか教えてくれたら本当にありがたいです.そしてそれを修正する方法。

それが問題かどうかはわかりませんが、下にあるスプライトは実際には単なるスプライトではなく、いくつかの 3D 要素を含む Papervision3D レンダラー オブジェクトです。これを言っているのは、クリック可能なオブジェクトにマップされたテクスチャ UV が原因で、マウスの座標が正しくない可能性があるからです。

4

3 に答える 3

1

これは、何らかのソースがなければデバッグするのが難しいものです。何かが move() を呼び出すか、その TitleWindow で x および y プロパティを設定して、移動するようにスケジュールしているようです。

私が最初に投稿を読んだとき、おそらくどこかで回転の誤算のような「臭い」がした (Math.atan と Math.atan2 を使用すると、そのような効果が生じることがあります)。 Math.atan を使用していないか、自分で回転プロパティを設定していないと仮定します。あなたの場合はおそらく起こっていませんが、私はそれについて言及したいと思いました。しかし、あなたは決して知りません。;)

コンポーネントのプロパティの変更に応じて、LayoutManager がコンポーネントを移動している可能性が高くなります。 Flex のドキュメントでは、x プロパティと y プロパティの設定、および move() の明示的な呼び出しに加えて、UIComponent のmoveイベントは、次の他のプロパティのいずれかが変更されたときにもトリガーされる可能性があると説明されています。

  • 最小幅
  • 最小高さ
  • 最大幅
  • 最大高さ
  • 明示的な幅
  • 明示的な高さ

PaperVision であろうとなかろうと、その情報は移動の原因を突き止めるのに役立つかもしれません。幸運を。

于 2009-01-19T17:51:01.937 に答える
1

ローレゾモードでも再現できたので解像度には関係ないと思います。

これは、MouseEvent が TitleWindow と Papervision3D ウィンドウによって処理されているためと思われます。おそらく、いずれかで stopImmediatePropagation() を強制する必要がありますか? それとも、TitleWindow がポップアップしたときに、Pv3D ウィンドウの MouseEvent 処理をオフに切り替えますか?

于 2009-01-19T15:46:49.397 に答える
1

私はこれを理解しました。どうやら、これは Papervision3D の問題です。Papervision3D の奥深くに と呼ばれるクラスがあり、プログラムVirtualMouseで を生成することになっていMouseEventます。これは、たとえば、ユーザーがステージ上のインタラクティブなオブジェクトのいずれかと対話するときに発生しますPlane

問題は、生成されたイベントの x 座標と y 座標がテクスチャ UV 座標を表しており (私が思っていたとおり)、実際の画面座標ではありません。TitleWindow(または任意のオブジェクトPanel) がドラッグされると、「mouseMove」ハンドラー (とりわけ) が に追加され、イベント オブジェクトのおよびプロパティをSystemManager使用して、ウィンドウの新しい位置が決定されます。のマウス イベントについては残念ながら、これらは無効です。なぜなら、グローバル ステージ座標を決定するためにおそらく使用される元の x、y 座標は、前述したように、スクリーン座標ではないからです。stageXstageYVirtualMouse

正直なところ、によってディスパッチされたイベントVirtualMouseが Papervision3D 自体のどこかで使用されているのか、それとも便宜上提供されているだけなのかはまだわかりませんが、ビューポートを Flex プログラムに統合することは確かに困難です。そのようなイベントが PV3D 自体には必要ないと仮定すると、ビューポートの作成直後に追加する必要がある、私の問題に対するワンライナー修正があります。

viewport.interactiveSceneManager.virtualMouse.
    disableEvent(MouseEvent.MOUSE_MOVE);

ところで、スライダーのドラッグに関して非常によく似た (というか、結局のところ同じ) バグがありましたが、これもこの行で修正されました。

于 2009-01-21T11:02:10.357 に答える