actionscript-3 - Flash AS3 - 添加反射/镜像到可拖动的动画片段

标签 actionscript-3 reflection drag mirror

我需要创建一个 Flash 文件,仅从 1 张图像创建图案形状。它需要反射或镜像加载的可拖动动画片段——当您在舞台上移动和拖动动画片段时,反射/镜像会更新。

我遇到过:http://active.tutsplus.com/freebies/actionscript-30-classes/dynamic-reflection-generator-class-for-as3/ 这与我所追求的非常相似。该演示似乎还不错,但正如评论中所述,拖动过程中有很多减速和滞后,尤其是当您拖动的图像开始变大时。

很抱歉问了很多问题,我不是在寻求完整的解决方案,我只需要首先知道它是否可以完成以及我如何才能实现它?

我希望下面的图片可以帮助解释:

第 1 阶段: 将用户图案图像加载到舞台上,如下所示:

http://www.tiltworld.co.uk/yhfus6fh/pattern_1.png

第 2 阶段: 显示我希望反射如何工作 - 在图案每一侧的 4 个 block 中:

.../pattern_2.png

(与上面相同的链接,只是最后有 pattern_2.png)

第 3 阶段: 让反射适应用户在舞台上拖动图案的位置。如图所示,反射发生在每侧的 4 个 block 内,而不是直接附加到原始动画片段上/旁边。

..../pattern_3.png

(与上面的 2 相同的链接,只是最后带有 pattern_3.png)

劳伦:)

附注我下面的当前代码显示了当前的第 1 阶段 - 我如何使用 fileReference.load 将模式加载到舞台上,然后使用 startDrag 将其拖到舞台上。

// Create FileReference.
var draggableMC:FileReference;

// Create Loader to hold image content
var draggable_mc_loader:Loader = new Loader();
var draggable_mc_content:Sprite = new Sprite();

// Select Button Function.
select_btn.addEventListener(MouseEvent.CLICK, onselect_btnClicked);

function onselect_btnClicked(event:MouseEvent):void {
draggableMC=new FileReference();
draggableMC.addEventListener(Event.SELECT, onFileSelected);
var imageTypeFilter:FileFilter = new FileFilter("JPG/PNG Files","*.jpeg; *.jpg;*.gif;*.png");
draggableMC.browse([imageTypeFilter]);
}

// File Selected Function.
function onFileSelected(event:Event):void {
draggableMC.addEventListener(Event.COMPLETE, onFileLoaded);
draggableMC.load();
}

// File Loaded Function.
function onFileLoaded(event:Event):void {
var fileReference:FileReference=event.target as FileReference;

var data:ByteArray=fileReference["data"];
var movieClipLoader:Loader=new Loader();
movieClipLoader.loadBytes(data);
movieClipLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onMovieClipLoaderComplete);

draggableMC.removeEventListener(Event.COMPLETE, onFileLoaded);
}

// Load Image onto Stage Function.
function onMovieClipLoaderComplete(event:Event):void {
var loadedContent:DisplayObject=event.target.content;
draggable_mc_loader =event.target.loader as Loader;
draggable_mc_loader.x=10;
draggable_mc_loader.y=10;
draggable_mc_content.buttonMode=true;
draggable_mc_content.addChild(draggable_mc_loader);
addChild(draggable_mc_content);
}

// Drag
draggable_mc_content.addEventListener(MouseEvent.MOUSE_DOWN, drag);
stage.addEventListener(MouseEvent.MOUSE_UP, drop);

function drag(event:Event):void {
draggable_mc_content.startDrag();
}
function drop(event:Event):void {
draggable_mc_content.stopDrag();
}

最佳答案

是的,这完全可以做到,你有没有试过使用他的组件。在查看附加到您链接的组件的 fla 中的代码时,他让它在 MouseMove 上更新,这并不理想,可以在单个帧循环中调度多个移动事件(我相信默认帧速率是 24,所以每 1/24一秒钟将是一个帧循环,基于 MouseMove 的更新将不必要地快)。如果它被简单地调整为打开一个计时器,该计时器在单击对象后每十分之一秒滴答一次(鼠标按下然后在鼠标抬起或滚动时关闭),而不是尝试为每个鼠标移动事件都这样做它会显着提高性能。此外,他的代码效率低下很多,正如他所说的那样,如果您需要针对某些任务对其进行优化,那么他可以免费将其放在那里,然后对其进行优化。他的代码中其他一些效率低下的地方是在可以拉入构造函数的方法调用中创建对象,以及在您的示例中似乎没有必要使用过滤器。今天早些时候偶然发现了这篇关于 AS3 优化的帖子,查看 Jason Sturges 的个人资料 What are the major performance hitters in AS3 aside from rendering vectors?

关于actionscript-3 - Flash AS3 - 添加反射/镜像到可拖动的动画片段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10756684/

相关文章:

apache-flex - Flex + 缓冲区 + 通过 RTMP 进行直播 = 灾难

flash AS3自定义按钮翻转(windows 7风格)

actionscript-3 - 在 Flash as3 网络摄像头录像机中如何在连接丢失后重新连接或重新发布

c++ - 我将如何获取函数中参数的名称

c# - 使用 C# 查看 MemberInfo 是否与 BindingFlags 匹配

objective-c - 使用属性名称动态访问 Objective-C 属性

wpf - DragMove() 和最大化

actionscript-3 - Flex : how to pretty print JSON. 字符串化?

syntax-error - 拖入文件时在pharo中出现语法错误

javascript - 为什么 clientX 在最后一次拖动事件中重置为 0,如何解决?