我需要创建一个仅从 1 个图像创建图案形状的 flash 文件。它需要反射或镜像加载的可拖动影片剪辑 - 随着您在舞台上移动和拖动影片剪辑,反射/镜像会更新。
我遇到过: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 个块:
.../pattern_2.png
(与上面相同的链接只是在最后带有pattern_2.png)
第 3 阶段: 让反射适应用户在舞台上拖动图案的位置。在图像中,反射发生在每侧的 4 个块内,而不是直接附加到原始影片剪辑上/旁边。
..../pattern_3.png
(与上面的 2 相同的链接只是在最后带有 pattern_3.png )
劳伦:)
ps 我下面的当前代码显示当前的第 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();
}