actionscript-3 - SWFLoader 上的 Actionscript 3 和 Flex 4 缩放手势

标签 actionscript-3 flash apache-flex

我似乎对 SWFLoader 上的缩放手势有问题。我有一个 swf 文件,它是一个家庭的平面图,我希望用户能够用两个手指触摸放大和缩小,下面的代码是我尝试过的,但不起作用。当我在触摸屏上测试时,当我将两根手指放入 SWF 并尝试放大时,它不会缩放。

<s:SWFLoader id="floorplanImage" source="@Embed('assets/test2.swf')" width="100%" height="100%" smoothBitmapContent="true" horizontalAlign="center" />

这是我的 actionscript 3 代码
import flash.ui.Multitouch;  
            import flash.ui.MultitouchInputMode;  

            Multitouch.inputMode = MultitouchInputMode.GESTURE;

            import flash.events.Event;

            public var selectedItem:Object;

            public function init(): void
            {
                floorplanImage.addEventListener(TransformGestureEvent.GESTURE_ZOOM , onZoom);
            }

            public function onZoom (e:TransformGestureEvent):void{
                floorplanImage.scaleX *= e.scaleX;
                floorplanImage.scaleY *= e.scaleY; 
            }

请帮忙!

更新

我要走gestouch的路线,但是使用此代码,我无法放大或缩小SWF。使用常规图像它可以工作,但不能使用 SWF,除非我遗漏了一些东西。这是我的代码:
<mx:Script>
                <![CDATA[

                    import org.gestouch.events.GestureEvent;
                    import org.gestouch.gestures.TransformGesture;

                    private var _zoom:TransformGesture;

                    [Embed(source="assets/test2.swf")]
                    private var myClass:Class;
                    private var myMovieClip:MovieClip;


                    private function initModel():void
                    {   

                        myMovieClip = MovieClip(new myClass());
                        swfcontainer.addChild(myMovieClip);

                        _zoom = new TransformGesture(swfcontainer);
                        _zoom.addEventListener(org.gestouch.events.GestureEvent.GESTURE_BEGAN, onGesture);
                        _zoom.addEventListener(org.gestouch.events.GestureEvent.GESTURE_CHANGED, onGesture);

                    }

                    private function onGesture(event:org.gestouch.events.GestureEvent):void
                    {
                        const gesture:TransformGesture = event.target as TransformGesture;
                        var matrix:Matrix = swfcontainer.transform.matrix;

                        // Panning
                        matrix.translate(gesture.offsetX, gesture.offsetY);
                        swfcontainer.transform.matrix = matrix;

                        if (gesture.scale != 1)
                        {
                            // Scale and rotation.
                            var transformPoint:Point = matrix.transformPoint(swfcontainer.globalToLocal(gesture.location));
                            matrix.translate(-transformPoint.x, -transformPoint.y);
                            matrix.scale(gesture.scale, gesture.scale);
                            matrix.translate(transformPoint.x, transformPoint.y);

                            swfcontainer.transform.matrix = matrix;
                        }
                    }

                ]]>
            </mx:Script>

<mx:Image id="swfcontainer" horizontalAlign="center" width="100%" height="100%" />

当我将它与常规图像一起使用时,它仍然无法正常工作......缩放时它不会保持图像中心,它不允许我放大,只能缩小,当我第一次使用它时,它会移动图像向右。这怎么这么难?

请记住,我对 Adob​​e Flex 和 Actionscript 非常陌生,所以请尽可能清楚地回答您的问题。

最佳答案

你的代码没有问题,我会解释我为我的项目做了什么。也许它有帮助,我有 Window 设计应用程序,我将 SWF 加载到 Starling 中,但遇到了问题
具有缩放和平移功能;

仅供引用:我在八哥和缩放平移工作中使用八哥并加载带有 native 叠加的 SWF 文件

   _mLoader = new Loader();
 var mRequest:URLRequest = new URLRequest("drawer.swf" + "?nf=" + getTimer());
_mLoader.contentLoaderInfo.addEventListener(flash.events.Event.COMPLETE, onCompleteHandler);
 _mLoader.load(mRequest);


     private function onCompleteHandler(loadEvent:flash.events.Event):void
    {
          _mLoader.contentLoaderInfo.removeEventListener(flash.events.Event.COMPLETE, 
           Starling.current.nativeOverlay.addChild(LoaderInfo(loadEvent.currentTarget).content);

    }

因为接触闪存的库很弱,所以我在库上面使用,这是强

首先在 lib 上进行测试,也许没有 Starling 也能工作

better GESTURE lib than flash lib

我使用这个库的缩放代码
     var _zoom:
    _zoom = new TransformGesture(this);
    _zoom.addEventListener(GestureEvent.GESTURE_BEGAN, onGesture);
    _zoom.addEventListener(GestureEvent.GESTURE_CHANGED, onGesture);

private function onGesture(event:org.gestouch.events.GestureEvent):void 
    {

        const gesture:TransformGesture = event.target as TransformGesture;

        var matrix:Matrix = container_movieclip.transform.matrix;



        if (container_movieclip.scaleX!=1 || container_movieclip.scaleY!=1) 
        {
            matrix.translate(gesture.offsetX, gesture.offsetY);
            container_movieclip.transform.matrix = matrix;
        }

        if (gesture.scale != 1)
        {
            var transformPoint:Point = matrix.transformPoint(container_movieclip.globalToLocal(gesture.location));
            matrix.translate(-transformPoint.x, -transformPoint.y);
            matrix.scale(gesture.scale, gesture.scale);
            matrix.translate(transformPoint.x, transformPoint.y);
            container_movieclip.transform.matrix = matrix;

        }

    }

我希望我能帮上忙

关于actionscript-3 - SWFLoader 上的 Actionscript 3 和 Flex 4 缩放手势,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44738605/

相关文章:

javascript - 有什么方法可以在 Flash 中显示 HTML 内容吗?

apache-flex - 对于潜在的 Flex 开发人员来说,有哪些好的面试问题?

c# - C# winforms中有像Flex中 "ViewStack"这样的控件吗?

actionscript-3 - "open source"媒体框架有何意义?

ios - 我怎样才能使用 AIR 获得任何 ios 设备的分辨率..?

Flash:如何为外部加载的 SWF 暂时禁用或阻止所有鼠标事件

actionscript-3 - 在 SWF 之间传递值

apache-flex - 以编程方式混合音轨(无播放)

actionscript-3 - adobe media server 4 与亚马逊的费用如何?

apache-flex - 在 ActionScript/Flex 3 中将事件与类关联的最佳方法是什么?