2

iOSゲームを作成していますが、単純なタップとジェスチャー(スワイプなど)の両方を同時に検出する必要があります。AIRでは、マルチタッチ入力モードの設定は、TOUCH_POINT(基本的なタッピングで機能します)とGESTUREの1つだけです。しかし、両方を同時に必要とするので、モードを変更することはできません。どうすれば両方を同時に聞くことができますか?

ありがとう、できます。

4

3 に答える 3

3
import flash.events.EventDispatcher;
import flash.events.TouchEvent;
import flash.net.Responder;
import flash.ui.Multitouch;
import flash.ui.MultitouchInputMode;

public class SwipeAndTap extends EventDispatcher
{
    private var fingerX:int;
    private var fingerY:int;
    private var elem:Object;

    public function SwipeAndTap(_elem:Object)
    {
        Multitouch.inputMode = MultitouchInputMode.TOUCH_POINT;

        elem = _elem;
        elem.addEventListener(TouchEvent.TOUCH_BEGIN, onTouchBegin);
        elem.addEventListener(TouchEvent.TOUCH_MOVE, onTouchMove);
        elem.addEventListener(TouchEvent.TOUCH_END, onTouchEnd);
    }
    private function onTouchBegin(e:TouchEvent):void 
    {
        fingerX = e.stageX;
        fingerY = e.stageY;
    }
    private function onTouchMove(e:TouchEvent):void 
    {
        if(e.stageX > (fingerX+150) && (e.stageY > (fingerY-100) && e.stageY < (fingerY+100) ) )
        {
            // swipe right
            dispatchEvent(new TouchSwipeRight(TouchSwipeRight.SWIPE_RIGHT, e));
        }
        else if(e.stageX < (fingerX-150) && (e.stageY > (fingerY-100) && e.stageY < (fingerY+100) ) )
        {
            // swipe left
            dispatchEvent(new TouchSwipeLeft(TouchSwipeLeft.SWIPE_LEFT, e));
        }
    }

    private function onTouchEnd(e:TouchEvent):void 
    { 
        // e.touchPointID;
        if(e.stageX > (fingerX-40) && e.stageX < (fingerX+40))
        {
            dispatchEvent(new TouchEventTap(TouchEventTap.TAP, e));
            elem.removeEventListener(TouchEvent.TOUCH_BEGIN, onTouchBegin);
            elem.removeEventListener(TouchEvent.TOUCH_MOVE, onTouchMove);
            elem.removeEventListener(TouchEvent.TOUCH_END, onTouchEnd);
        }

    }
}

例:

var SAT:SwipeAndTap = new SwipeAndTap(stage);
    SAT.addEventListener(TouchEventTap.TAP, LangSelected);
    SAT.addEventListener(TouchSwipeRight.SWIPE_RIGHT, ENtoPL);
    SAT.addEventListener(TouchSwipeLeft.SWIPE_LEFT, PLtoEN);
于 2012-12-13T18:55:54.637 に答える
1

タップには標準のマウス イベントを使用できます。

これにより、ジェスチャ マルチタッチ入力モードが維持されます。

それ以外の場合は、Gestouch フレームワーク: GitHub でのマウス、タッチ、およびマルチタッチ AS3 開発のための NUI ジェスチャ検出フレームワークが興味深いかもしれません。

また、タッチ/ジェスチャ イベント モデルのパフォーマンスへの影響にも注意してください。

ユーザーのデバイスによっては、タッチ入力とジェスチャ入力の両方がマルチタッチ入力になる場合があります。ActionScript は、タッチ イベント、ジェスチャ イベント、およびマルチタッチ入力の個別に追跡されるタッチ イベントを処理するための API を提供します。

注: タッチおよびジェスチャ イベントをリッスンすると、コンピューティング デバイスとオペレーティング システムによっては、かなりの量の処理リソースが消費される可能性があります (1 秒あたり数フレームのレンダリングに相当)。タッチやジェスチャによって提供される追加機能を実際に必要としない場合は、マウス イベントを使用する方がよい場合がよくあります。タッチ イベントまたはジェスチャ イベントを使用する場合は、発生する可能性のあるグラフィックの変化の量を減らすことを検討してください。特に、パン、回転、またはズーム操作中など、このようなイベントが迅速にディスパッチされる可能性がある場合は注意が必要です。たとえば、ユーザーがズーム ジェスチャを使用してコンポーネントのサイズを変更している間、コンポーネント内のアニメーションを停止できます。

于 2012-08-02T06:24:10.517 に答える
1

TOUCH_POINT基本的なタッピングを設定する必要があるかどうかはよくわかりません。設定があれば、同様に機能するはずですGESTURE。マウスイベントでシミュレートできます。

いずれにせよ、デフォルトの AIR ジェスチャのサポートはそれほど良くないため、そのようには機能しない可能性があるため、Gestouchライブラリを調べることをお勧めします。非常にうまく機能する、はるかに洗練されたジェスチャ サポートが得られます。Flex/AS3 プロジェクトで何ヶ月も使用してきましたが、とても満足しています。

于 2012-08-02T06:24:29.507 に答える