AS3 拖放
AS3 Drag and Drop
我想通过拖放进行配对。应该有三个项目在舞台上相应的其他三个项目上移动。但是我可以预测添加子项会动态更改所有索引 (z/depth/whatever)。因此,当 'accidentally' 有人将鼠标悬停在匹配的对上时,鼠标将悬停在项目上方,但拖动一个站在后面。到时候'dropping'可能会毁了程序
有什么办法可以避免这种情况吗?任何帮助将不胜感激。
首先要设置拖动对象:
Sprite(draggingObject.parent).setChildIndex(draggingObject, Sprite(draggingObject.parent).numChildren - 1);
您还需要在阶段值处收听 MOUSE_UP 事件。
工作示例:
import flash.display.Sprite;
import flash.events.MouseEvent;
var container:Sprite = new Sprite();
var dragged:Sprite;
addChild(container);
var card:Sprite;
for (var j:uint = 0; j < 10; j++) {
card = new Sprite();
container.addChild(card);
card.buttonMode = true;
card.graphics.beginFill(0x000000);
card.graphics.drawRect(0,0,30,30);
card.x = j*40;
card.addEventListener(MouseEvent.MOUSE_DOWN, stardDragListener);
}
stage.addEventListener(MouseEvent.MOUSE_UP, stopDragEvent);
function stardDragListener(e:MouseEvent):void {
dragged = Sprite(e.currentTarget);
Sprite(dragged.parent).setChildIndex(dragged, Sprite(dragged.parent).numChildren - 1)
dragged.startDrag();
}
function stopDragEvent(e:MouseEvent):void {
if (dragged) dragged.stopDrag();
}
我想通过拖放进行配对。应该有三个项目在舞台上相应的其他三个项目上移动。但是我可以预测添加子项会动态更改所有索引 (z/depth/whatever)。因此,当 'accidentally' 有人将鼠标悬停在匹配的对上时,鼠标将悬停在项目上方,但拖动一个站在后面。到时候'dropping'可能会毁了程序
有什么办法可以避免这种情况吗?任何帮助将不胜感激。
首先要设置拖动对象:
Sprite(draggingObject.parent).setChildIndex(draggingObject, Sprite(draggingObject.parent).numChildren - 1);
您还需要在阶段值处收听 MOUSE_UP 事件。
工作示例:
import flash.display.Sprite;
import flash.events.MouseEvent;
var container:Sprite = new Sprite();
var dragged:Sprite;
addChild(container);
var card:Sprite;
for (var j:uint = 0; j < 10; j++) {
card = new Sprite();
container.addChild(card);
card.buttonMode = true;
card.graphics.beginFill(0x000000);
card.graphics.drawRect(0,0,30,30);
card.x = j*40;
card.addEventListener(MouseEvent.MOUSE_DOWN, stardDragListener);
}
stage.addEventListener(MouseEvent.MOUSE_UP, stopDragEvent);
function stardDragListener(e:MouseEvent):void {
dragged = Sprite(e.currentTarget);
Sprite(dragged.parent).setChildIndex(dragged, Sprite(dragged.parent).numChildren - 1)
dragged.startDrag();
}
function stopDragEvent(e:MouseEvent):void {
if (dragged) dragged.stopDrag();
}