我创建了一个图像对象,我能够放大。 但图像只能在图像中心的视野中。 那我怎么能放大手势点的图像?
picture.addEventListener(TransformGestureEvent.GESTURE_ZOOM, onZoom);
function onZoom(e:TransformGestureEvent){
picture.scaleX *= (e.scaleX+e.scaleY)/2;
picture.scaleY *= (e.scaleX+e.scaleY)/2;
}
答案 0 :(得分: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();
}
你的照片很可爱..:D
答案 1 :(得分:1)
欢迎使用StackOverflow。我通常不会使用触摸事件,因为我开发的是桌面软件,而不是移动软件。但是,我确实有一个想法。我不会冒险使用代码,因为没有任何编写与触摸相关的事件监听器的经验,我可能会遇到问题。但是,我非常有信心该方法可行。
对于AS3中的每个事件,如您所知,有很多关于它的数据。通常存在于鼠标和触摸相关事件上的一条数据是位置 - 屏幕上的对象或触摸发生的对象。
我建议使用此数据来调整屏幕上图片的位置,方法是使用触摸事件的坐标作为视图的新“中心”。
同样,我没有提供代码,因为我之前从未编写过与触摸相关的事件监听器(我总是使用鼠标和键盘事件。)但是,我会冒险尝试这些信息的可能来源如果触摸与鼠标类似,则可以在onZoom函数中的e.x
和e.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.x
,picture.y
,picture.width
和{{1作为你的变量。
另一个警告...... EVENT上的x和y可能在舞台上,也可能在物体本身上。您将需要使用跟踪语句和一些常识来解决这个问题,并且可能需要更复杂的数学运算。不过,我不想给你太多,因为这是课程,就像你说的那样。
答案 2 :(得分:0)