处理可编辑对象

时间:2015-11-19 10:52:39

标签: actionscript-3 image-resizing

这是场景。 用户选择图像,视频或其他类型的显示对象。它被加载到称为EditableObject的自定义类中。 EditableObject的目标是重新调整大小和重新定位。 EditableObject有4个动画片段。

center_mc:处理拖放并包含显示对象。

rightside_mc:处理mousedown上宽度的重新调整

bottomside_mc:处理在mousedown上重新调整身高的尺寸

bottomright_mc:处理mousedown上对象的缩放

到目前为止,我可以扩展这些对象的所有部分。这些错误是造成麻烦的原因。

当我单击显示对象的底部或右侧时,显示对象会在我移动鼠标之前从其处理的任何一侧增加尺寸。我根据在MOUSE_DOWN和每个MOUSE_MOVE结束时传递的鼠标的stageX和stageY位置的差异来获取移动量。这不是一个问题,它看起来很糟糕,目前解决了第二个错误..

当我处理bottomright_mc时,我只能缩小对象。当我试图向外扩展时,我必须将鼠标放在EditableObject之外以获得大于bottomright_mc当前位置的差异。这不起作用,因为任何退出EditableObject边界的尝试都会触发MOUSE_UP,即使我使用this.parent添加事件监听器..

我希望能够在按住鼠标并移动鼠标时,使用EditableObject的两个边和一个角重新定位和缩放EditableObject内的任何内容。目前我只能移动对象,缩小对象的当前大小,并使用两边调整对象的宽度和高度,但不要让鼠标匹配它在初始化时正在处理的边的位置。

这是MOUSE_MOVE处理程序的摘录。

private function handleMouseMove(e:MouseEvent):void
            {
                    switch(dragType)
                    {
                            case "right":
                                    trace("Right triggered.");
                                    this.width = e.stageX - this.x;
                                    break;
                            case "bottom":
                                    trace("Bottom triggered");
                                    this.height = e.stageY - this.y;
                                    break;
                            case "bottomright":
                                    resizeMe(this, e.stageX - this.x, this.height);
                                    break;
                    }


                    prevMouseX = e.stageX;
                    prevMouseY = e.stageY;
            }

可以找到该课程的完整代码here on pastebin.

这是Adobe Flash CC中的可编辑对象EditableObject in Adobe Flash CC 这里的EditableObject当前包含并处理编辑器中的图像。 enter image description here

1 个答案:

答案 0 :(得分:0)

基于TOMATO在评论中提供的关于stackoverflow的this答案,我找到了一个很棒的API,可以轻松地让您只用几行代码处理DisplayObjects。

我选择的是senocular的变换工具。可以找到他的工作示范here。细分,这是如何使用它。

//Constructor
var editTool:TransformTool = new TransformTool(); 

//Add to stage (This will not be visible until you give your TransformTool a target)
addChild(editTool);

desiredDisplayObject.addEventListener(MouseEvent.CLICK, handleMouseClick)

function handleMouseClick(e:MouseEvent):void
{
    //Set the object clicked as the target for the TransformTool
    editTool.target = e.target as Sprite;
    //Swap the positioning in the display list so the TransformTool appears in front
    editTool.parent.setChildIndex(editTool, editTool.parent.numChildren - 1);
}

您可以通过多种方式完成此操作,但其基础是简单地将变换工具添加到舞台并将您想要的任何显示对象分配给TransformTool。