AS3 - 捏缩放手势舞台

时间:2016-11-02 20:07:25

标签: actionscript-3 flash adobe gesture

我正在创建一个工具,允许代表为我们的客户选择最好的产品。有人要求在移动设备上使用此工具。我想为用户提供捏合缩放的选项,以便在小型设备上更合适地使用该设备。

由于工具的性质,我无法将工具的内容放入影片剪辑并捏合缩放该影片剪辑。我搜索一个工作的AS3代码来捏合缩放舞台(以及舞台上的内容)已经空了。

我确实在Stack Overflow上找到了这段代码:

Multitouch.inputMode = MultitouchInputMode.GESTURE;

stage.addEventListener(TransformGestureEvent.GESTURE_ZOOM , onZoom); 
function onZoom (e:TransformGestureEvent):void{
  stage.scaleX *= e.scaleX;
  stage.scaleY *= e.scaleY; 
}

通过Adobe Animate测试时返回以下错误:

Error: Error #2071: The Stage class does not implement this property or method.
    at Error$/throwError()
    at flash.display::Stage/set scaleX()
    at Beta04_fla::MainTimeline/onZoom()[Beta04_fla.MainTimeline::frame501:5]
    at runtime::ContentPlayer/simulationSendGestureEvent()
    at runtime::SimulatedContentPlayer/clientSocketDataHandler()

任何人都可以提供有关如何解决此问题的工作代码或建议吗?提前谢谢。

1 个答案:

答案 0 :(得分:1)

停止缩放阶段,这不是正确的方式

将您的内容移动到子动画片段而不是舞台,然后缩放或仅使用位图:

你必须做一个放大倍数。 你应该首先拍摄你的舞台, 意味着绘制整个舞台或只是想要舞台的区域,使用您自己的变换矩阵(matrix.scale(2,2))绘制一个位图对象,然后将其剪切为您喜欢的尺寸,并将其作为一个新的客户更喜欢它临时动画片。

var bitmapData:BitmapData = new BitmapData(stage.stageWidth, stage.stageHeight);
var matrix:Matrix = new Matrix();
matrix.translate(-50,-50); // moves your stage under magnifier
matrix.scale(3,3); // magnification
bitmapData.draw(stage, matrix);

// And to actually see it 
var bitmap:Bitmap = new Bitmap(bitmapData);
this.addChild(bitmap);

enter image description here

如果想要平滑的动画缩放,您可以在事件监听器中使用步变量更新位图,这会根据手指之间的距离影响矩阵变化,而不是代码中的静态缩放