以下是我在Flex应用中使用的模块的示例代码。我想动态创建mx.controls.Image对象并将它们添加到显示中。我希望用户能够移动它们(这可以如下工作)并且能够在移回数据库之后更改其z-index以及记录新的X和Y坐标。如何确定this.getChildren()中的哪个对象是用户正在使用的“选定”项?例如,当我添加MOUSE_OVER事件时,它不起作用。
<?xml version="1.0" encoding="utf-8"?>
import flash.display.DisplayObject;
import flash.events.MouseEvent;
import mx.controls.Image;
public var draggedObject:DisplayObject;
public var selectedObject:DisplayObject;
public var offsetX:Number;
public var offsetY:Number;
public function Add():void
{
var _image:Image = new Image;
_image.source = "myimage.png";
_imagem.x = 100;
_image.y = 100;
_image.addEventListener(MouseEvent.MOUSE_DOWN, startDragging);
_image.addEventListener(MouseEvent.MOUSE_UP, stopDragging);
this.addChild(_image);
}
// This function is called when the mouse button is pressed.
public function startDragging(event:MouseEvent):void
{
// remember which object is being dragged
draggedObject = DisplayObject(event.target);
selectedObject = draggedObject;
// Record the difference (offset) between where the cursor was when
// the mouse button was pressed and the x, y coordinate of the
// dragged object when the mouse button was pressed.
offsetX = event.stageX - draggedObject.x;
offsetY = event.stageY - draggedObject.y;
// move the selected object to the top of the display list
//stage.addChild(draggedObject);
// Tell Flash Player to start listening for the mouseMove event.
stage.addEventListener(MouseEvent.MOUSE_MOVE, dragObject);
}
// This function is called when the mouse button is released.
public function stopDragging(event:MouseEvent):void
{
// Tell Flash Player to stop listening for the mouseMove event.
stage.removeEventListener(MouseEvent.MOUSE_MOVE, dragObject);
}
// This function is called every time the mouse moves,
// as long as the mouse button is pressed down.
public function dragObject(event:MouseEvent):void
{
// Move the dragged object to the location of the cursor, maintaining
// the offset between the cursor's location and the location
// of the dragged object.
draggedObject.x = event.stageX - offsetX;
draggedObject.y = event.stageY - offsetY;
// Instruct Flash Player to refresh the screen after this event.
event.updateAfterEvent();
}
]]>
</mx:Script>
<mx:Button x="83" y="93" label="New Image" click="this.Add()"/>
<mx:Label x="83" y="138" id="label1"/>
<mx:Label x="83" y="164" id="label2"/>
答案 0 :(得分:4)
因此,混合使用这些不同的功能可能会导致:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:Script>
<![CDATA[
import mx.controls.Image;
private function addImage() : void {
var img : Image = new Image();
img.source = imgClass;
img.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown, false, 0, true);
canvas.addChild(img);
}
private function onMouseUp(e : MouseEvent) : void {
var img : Image = e.currentTarget as Image;
if (img !== null) {
stopDrag();
img.removeEventListener(MouseEvent.MOUSE_UP, onMouseUp);
}
}
private function onMouseDown(e : MouseEvent) : void {
var img : Image = e.currentTarget as Image;
if (img !== null) {
var parent : DisplayObjectContainer = img.parent;
// get the index of the image and do what you want with it
var idxImg : int = parent.getChildIndex(img);
// put the clicked object on top of the list
parent.setChildIndex(img, parent.numChildren - 1);
img.addEventListener(MouseEvent.MOUSE_UP, onMouseUp, false, 0, true);
img.startDrag();
}
}
[Embed(source="assets/logo.png")]
private var imgClass : Class;
]]>
</mx:Script>
<mx:Canvas id="canvas">
<mx:Button label="add" click="addImage()"></mx:Button>
</mx:Canvas>
</mx:Application>