1

私はこのコードを使用して onclick メソッドをシミュレートするためにスターリング フレームワークを使用しています。

if(e.getTouch(this).phase == TouchPhase.ENDED){
            //Some code
}

それは問題ありませんが、マウスがボタンの上にない場合にも発火しますが、ボタンが終わった場合にのみディスパッチしたいと思います。これを達成する方法はありますか?ありがとう

コードでは、「これ」はスプライトです。ちょっと関係ありませんが

4

3 に答える 3

0

ドキュメントによると、ターゲットが現在タッチされている場合、クラスのinteractsWith(target:DisplayObject)メソッドはtrueを返す必要があります。この理論をテストする方法はありませんが、次のように機能するはずです。TouchEvent

if (e.getTouch(this).phase == TouchPhase.ENDED && e.interactsWith(this)) {
    //The touch ended on the same DisplayObject as it originated at
}
于 2013-02-07T20:34:30.600 に答える
0

簡単な方法は、starling.display.Button を使用することです。基本的に必要なものである TRIGGERED イベントをディスパッチします。「それほど簡単ではない」方法は、 Button で実際に行われることを複製することにより、タッチを追跡することです。

    private function onTouch(event:TouchEvent):void
    {
        var touch:Touch = event.getTouch(this);
        if (!mEnabled || touch == null) return;

        if (touch.phase == TouchPhase.BEGAN && !mIsDown)
        {
            //equivalent to MOUSE_DOWN
            mIsDown = true;
        }
        else if (touch.phase == TouchPhase.MOVED && mIsDown)
        {
            // reset button when user dragged too far away after pushing
            var buttonRect:Rectangle = getBounds(stage);
            if (touch.globalX < buttonRect.x - MAX_DRAG_DIST ||
                touch.globalY < buttonRect.y - MAX_DRAG_DIST ||
                touch.globalX > buttonRect.x + buttonRect.width + MAX_DRAG_DIST ||
                touch.globalY > buttonRect.y + buttonRect.height + MAX_DRAG_DIST)
            {
                mIsDown = false;
            }
        }
        else if (touch.phase == TouchPhase.ENDED && mIsDown)
        {
            mIsDown = false;
            //this is a click
            dispatchEventWith(Event.TRIGGERED, true);
        }
    }

スプライトの形状を反映するように buttonRect コードを変更する必要がありますが、基本的にはここまでです。

于 2013-02-13T09:01:47.830 に答える
0

このアイデアはどうですか:

if ( e.getTouch( this ).phase == TouchPhase.ENDED ) {
    if ( this.hitTestPoint( stage.mouseX, stage.mouseY, true ) ) {
        // Some code
    }
}
于 2013-02-07T20:44:31.923 に答える