2014-01-06 57 views
3

我创建一个图像对象,我能放大。 但图像只能在图像中心的视图中。 所以我怎么能放大手势点的图像?如何捏手势点的缩放图片as3

picture.addEventListener(TransformGestureEvent.GESTURE_ZOOM, onZoom); 

function onZoom(e:TransformGestureEvent){ 
    picture.scaleX *= (e.scaleX+e.scaleY)/2; 
    picture.scaleY *= (e.scaleX+e.scaleY)/2; 
} 

回答

2

试试这一个伟大的图书馆......

import flash.events.TransformGestureEvent; 
import flash.ui.Multitouch; 
import flash.ui.MultitouchInputMode; 
import fl.motion.MatrixTransformer; 

Multitouch.inputMode = MultitouchInputMode.GESTURE; 
stage.addEventListener(TransformGestureEvent.GESTURE_ZOOM , onZoom); 
function onZoom(event:TransformGestureEvent):void 
{ 
    //trace(e.localX); 
    var locX:Number=event.localX; 
    var locY:Number=event.localY; 
    var stX:Number=event.stageX; 
    var stY:Number=event.stageY; 
    var prevScaleX:Number=gambar.scaleX; 
    var prevScaleY:Number=gambar.scaleY; 
    var mat:Matrix; 
    var externalPoint=new Point(stX,stY); 
    var internalPoint=new Point(locX,locY); 

    gambar.scaleX *= event.scaleX; 
    gambar.scaleY *= event.scaleY; 

    if(event.scaleX > 1 && gambar.scaleX > 6){ 
    gambar.scaleX=prevScaleX; 
    gambar.scaleY=prevScaleY; 
    } 

    if(event.scaleY > 1 && gambar.scaleY > 6){ 
    gambar.scaleX=prevScaleX; 
    gambar.scaleY=prevScaleY; 
    } 

    if(event.scaleX < 1.1 && gambar.scaleX < 1){ 
    gambar.scaleX=prevScaleX; 
    gambar.scaleY=prevScaleY; 
    } 

    if(event.scaleY < 1.1 && gambar.scaleY < 1){ 
    gambar.scaleX=prevScaleX; 
    gambar.scaleY=prevScaleY; 

    } 
    mat=gambar.transform.matrix.clone(); 
    MatrixTransformer.matchInternalPointWithExternal(mat,internalPoint,externalPoint); 
    gambar.transform.matrix=mat; 
} 

gambar.addEventListener(MouseEvent.MOUSE_DOWN, f_begin); 
gambar.addEventListener(MouseEvent.MOUSE_UP, f_end); 
function f_begin(e:MouseEvent):void 
{ 
    gambar.startDrag(); 
} 
function f_end(e:MouseEvent):void 
{ 
    gambar.stopDrag(); 
} 

BTW您的PIC是太可爱了。 。:D

+0

你无法拒绝帮助她看到这张照片:D –

1

欢迎来到StackOverflow。我通常不会使用触摸事件,因为我开发的软件是桌面软件,而不是移动软件。不过,我确实有一个想法。我不会冒用代码,因为没有任何经验写触摸相关的事件监听器,我可能会出错。不过,我相当确信该方法可行。如你所知,对于AS3中的每个事件,都有相当多的关于它的数据。通常出现在与鼠标和触摸有关的事件上的一段数据是位置 - 触摸发生在屏幕或对象上的哪个位置。

我会建议使用这些数据来调整屏幕上图片的位置,方法是使用触摸事件的坐标作为视图的新“中心”。我还没有提供代码,因为我之前从来没有写过一个触摸相关的事件监听器(我总是使用鼠标和键盘事件)。但是,我会冒昧认为这个可能的来源如果触摸是类似鼠标的信息,可在onZoom函数中的e.xe.y属性中找到。

我也冒昧地说,你可以用算法来计算你的图片的新位置,如下所示。我假设图片的注册点是左上角。 [这不是代码]

w=picture width 
h=picture height 
x=picture x position on stage 
y = picture y position on stage 
tx=touch event x on stage 
ty=touch event y) on stage 

x = (w/2) - tx 
y = (h/2) - ty 

希望这有助于!

编辑:要访问X,Y,W和H名为 “图片” 的图片,只需使用性质picture.xpicture.y,​​,并picture.height为您的变量。

另一个警告...... EVENT上的x和y可能在舞台上,或者在对象本身上。你会想使用跟踪语句和一些常识来解决这个问题,并可能需要一些更复杂的数学。不过,我不想给你太多,因为这是课程,就像你说的。

+0

谢谢你的回答Mr.Jason .. 但我真的是初学者制作动作脚本... 我不明白如何把它的图片在舞台上的x和y位置, T_T 有人可以帮助我?是我的课程作业 – SimanisJKT48

+0

嗨,用户。我会编辑我的答案,告诉你如何做到这一点。同时,由于您在这里是新手,因此您可能应该提一些关于提问和其他问题的知识。在我的个人资料中有一个“常见书呆子实地指南”的链接......我通常不会发表这个文章,但我建议您通过观察它来了解在SO和一般情况下该做什么或不该做什么。 (这是我所学到的一切。) – CodeMouse92

+0

谢谢你的回答Mr.Jason ...我将被精神学习..hehe – SimanisJKT48