4

私は ActionScript 2 の長年のユーザーで、現在は ActionScript 3 を使い始めています。欠けていることの 1 つは、AS2 の MovieClip.onReleaseOutside の機能を簡単に複製する方法です。ほとんどの場合、このイベントを実装する必要があります。そうしないと、実際にはマウスが上がっているのに、フラッシュがマウスが下がっていると判断するなど、おかしなバグが発生します。

AS2 to AS3 Migration Guideによると、これに使用することになってflash.display.InteractiveObject.setCapture()いますが、私が知る限り存在しません。このドキュメントは古くなっているか、間違っていると思います。この機能を複製する方法についての Web 上の投稿をいくつか見つけましたが、いずれにも独自の問題があります。

  • これは、対応する onPress イベントがなくても onReleaseOutside をトリガーします。
  • これは非常に非効率に思えます。マウスがアプリ内のどこかでクリックされるたびに、イベント リスナーを追加および削除します。

Adobe が Actionscript を書き直すときにこれを忘れていたとは言わないでください。

AS2 コードの例:

// Assume myMC is a simple square or something on the stage

myMC.onPress = function() {
  this._rotation = 45;
}

myMC.onRelease = myMC.onReleaseOutside = function() {
  this._rotation = 0;
}

onReleaseOutside ハンドラーがないと、四角形を押し下げ、マウスをその外側にドラッグしてマウスを放した場合、四角形は回転を戻さず、動かなくなったように見えます。

4

3 に答える 3

10

シンプルで誰にでもできる:

button.addEventListener( MouseEvent.MOUSE_DOWN, mouseDownHandler );
button.addEventListener( MouseEvent.MOUSE_UP, buttonMouseUpHandler ); // *

function mouseDownHandler( event : MouseEvent ) : void {
    trace( "onPress" );
    // this will catch the event anywhere
    event.target.stage.addEventListener( MouseEvent.MOUSE_UP, mouseUpHandler );
}

function buttonMouseUpHandler( event : MouseEvent ) : void {
    trace( "onRelease" );
    // don't bubble up, which would trigger the mouse up on the stage
    event.stopImmediatePropagation( );
}

function mouseUpHandler( event : MouseEvent ) : void {
    trace( "onReleaseOutside" );
    event.target.removeEventListener( MouseEvent.MOUSE_UP, mouseUpHandler );
}

onReleaseとonReleaseOutsideの違いを気にしない場合(たとえば、ドラッグ可能なアイテムの場合)、ボタン自体のマウスアップリスナーをスキップします(ここではアスタリスクでコメントされています)。

于 2008-11-02T21:56:14.640 に答える
3

このイベントを見たことがありますか:

flash.events.Event.MOUSE_LEAVE



ドキュメントから:

マウス ポインターがステージ領域の外に移動したときに、Stage オブジェクトによって送出されます。Event.MOUSE_LEAVE 定数は、mouseLeave イベント オブジェクトの type プロパティの値を定義します。

ユーザーのマウスがその特定のムービークリップのすぐ外側ではなく、ステージから外れているかどうかだけに関心がある場合は、問題を解決できます。

于 2008-11-01T19:42:17.577 に答える
3

root.addEventListener(MouseEvent.UP, onMouseReleaseOutside);

もちろん、onMouseReleaseOutside を定義します。基本的に、ボタン (または mc) の外で発生する MouseEvent.UP (マウスのリリース) は、ボタンの代わりにステージにヒットします。これは私が通常それを捕まえる方法です。

于 2008-11-01T19:52:50.347 に答える