1

最近、Gestureworks のマルチタッチを試してみました。ここでは、TouchSprite 内のボタンについていくつかの問題があります。以下は私のコードです。

package 
{
    import com.gestureworks.core.GestureWorks;
    import com.gestureworks.core.TouchSprite;
    import com.gestureworks.events.GWGestureEvent;
    import com.gestureworks.events.GWTouchEvent;
    import flash.display.Bitmap;
    import flash.display.BitmapData;
    import flash.display.Loader;
    import flash.display.Stage;
    import flash.events.Event;
    import flash.display.Sprite;
    import flash.net.URLRequest;
    import flash.events.MouseEvent;
    import flash.events.TouchEvent;
    import flash.ui.Multitouch;
    import flash.ui.MultitouchInputMode;

    public class Main extends GestureWorks
    {
        private var myDisplay:TouchSprite;

        public function Main():void
        {
            super();

            key = "xxx";

            Multitouch.inputMode = MultitouchInputMode.TOUCH_POINT;
        }

        override protected function gestureworksInit():void
        {
            myDisplay = new TouchSprite();

            myDisplay.gestureReleaseInertia = true;
            myDisplay.gestureEvents = true;
            myDisplay.disableNativeTransform = false;
            myDisplay.disableAffineTransform = false;
            myDisplay.mouseChildren = true;
            myDisplay.gestureList = {"n-drag":true,"n-scale":true};

            myDisplay.addChild(boliviaMap);
            myDisplay.addChild(mapPink);
            addChild(myDisplay);

            myDisplay.addEventListener(GWGestureEvent.DRAG, gestureDragHandler);
            myDisplay.addEventListener(GWGestureEvent.SWIPE, gestureSwipeHandler);
            mapPink.addEventListener(TouchEvent.TOUCH_TAP, tapPink);
        }

        private function tapPink(e:TouchEvent):void
        {
            trace("PINK");
            indicatorTxt.text = "PINK";
        }

        private function gestureDragHandler(event:GWGestureEvent):void
        {
            trace("g drag: ", event.value.dx, event.value.dy);
            event.target.$x +=  event.value.dx;
            event.target.$y +=  event.value.dy;
            indicatorTxt.text = "g drag: " + event.value.dx + " " + event.value.dy;
        }
    }
}

どうやら myDisplay.mouseChildren = true; myDisplay をドラッグまたはスケーリングできなくなります。

4

1 に答える 1

0

bigMap ボタンを追加する前に、myDisplay の mouseChildren プロパティを true に設定します。

myDisplay.mouseChildren = true;

これにより、mouseEvents が内部のオブジェクトに渡されます。

また、必要な効果に応じて (これはある種のマルチタッチ スクリーン用であると想定しています)、MouseEvent.CLICK(MouseEvents arent multi-touch) の代わりに bigMap で TouchEvent.TOUCH_TAP を使用することをお勧めします。同時に画面の別の部分になんらかのタッチがある場合は反応しません)。

編集:

boliviaMap と mapPink が TouchMovieClips または TouchSprites ではないと仮定すると、次のようになります。

myDisplay.graphics.beginFill(0x555555, 1);  
myDisplay.graphics.drawRect(0,0,500,500);
myDisplay.graphics.endFill();

次に、boliviaMap と mapPink が 500x500px 未満であると仮定して、お子様を追加します。

myDisplay.addChild(boliviaMap);
myDisplay.addChild(mapPink);

編集2-TouchEventsとGWEventsを組み合わせた実際の例(とにかく私にとって):

package  {

    import flash.display.MovieClip;
    import com.gestureworks.core.GestureWorks;
    import flash.ui.Multitouch;
    import flash.ui.MultitouchInputMode;
    import com.gestureworks.core.TouchSprite;
    import flash.display.Sprite;
    import flash.events.TouchEvent;

    public class Main extends GestureWorks {

        public function Main() {
            super(); 
            key = "INSERT YOUR GW KEY HERE";
            Multitouch.inputMode=MultitouchInputMode.TOUCH_POINT;
        }

        override protected function gestureworksInit():void 
        {
            trace("GestureWorks has initialized");
            var myTouchSprite:TouchSprite = new TouchSprite();
            myTouchSprite.graphics.beginFill(0x555555,1);
            myTouchSprite.graphics.drawRect(0,0,100,100);
            myTouchSprite.graphics.endFill();
            myTouchSprite.gestureReleaseInertia = false;
            myTouchSprite.gestureEvents = true;
            myTouchSprite.disableNativeTransform = false; 
            myTouchSprite.disableAffineTransform = false;
            myTouchSprite.gestureList = {"n-drag":true, "n-rotate":true};   
            myTouchSprite.mouseChildren = true;

            var myTappableSprite:Sprite = new Sprite();
            myTappableSprite.graphics.beginFill(0xAD3059,1);
            myTappableSprite.graphics.drawRect(30,30,40,40);
            myTappableSprite.graphics.endFill();
            myTappableSprite.addEventListener(TouchEvent.TOUCH_TAP, tappedThis);

            //myTouchSprite.addChild(myTappableSprite);
            myTouchSprite.addChild(myTappableSprite);
            addChild(myTouchSprite);
        }

        public function tappedThis(event:TouchEvent){
            trace("You tapped this");
        }
    }
}

また、これは TouchEvents をトリガーする画面/デバイスでのみ機能することも付け加えておく必要があります (マウスで myTappableSprite をクリックしている場合、イベントはトリガーされません)。

于 2012-05-24T15:54:09.673 に答える