我有用 ActionScript 3 编写的Flash游戏,这里有4个应该拖到特定字段的项目,它在将项目拖动到任何字段时正常工作(如果正确的字段 - 项目获取字段的{{ 1}},x
位置和if字段错误 - item返回到他的固定位置。)
当我试图将项目放在其他项目上时(例如,试图将y
拖放到Item1
上),它会出错,它们会改变位置。如果我拖动Item2
并且它不是 hitTestObject 正确的字段它应该回到Item1
的位置,但它会转到Items1
Item2
, x
位置和y
到第1项Item2
,x
位置。
我正在使用以下代码:
y
答案 0 :(得分:1)
我认为这是项目的深度问题(索引位置),因为,例如,当您将深度为1的项目拖动到索引为5的另一个项目时,MouseEvent.MOUSE_UP
事件的目标将为是第二个对象,而不是第一个,所以我认为你可以通过将当前项目的索引设置为项容器中的最高值来避免这种情况,如下所示:
function dragObject(e:MouseEvent):void {
var container:DisplayObjectContainer = DisplayObjectContainer(e.target.parent);
container.setChildIndex(DisplayObject(e.target), container.numChildren - 1);
// other instructions
}
编辑:
为避免出现第二个问题(将MouseEvent.MOUSE_UP
事件的目标定位在(0,0)或最后拖动的对象下),您可以使用布尔值来指示是否要拖动项目:
var is_dragging:Boolean = false;
function dragObject(e:MouseEvent):void
{
is_dragging = true;
// other instructions
}
function stopDragObject(e:MouseEvent):void
{
if(!is_dragging) return;
// other instructions
is_dragging = false;
}
布尔变量只是一种方式,您也可以初始化xPos
和yPos
,...
注意:要重现此问题,您只需点击舞台上的任意位置并将鼠标放在某个项目上,此项目将定位在(0,0),因为xPos
并且yPos
未定义,但如果您已拖动其他项目,则该项目位于(xPos
,yPos
),因此位于您上次拖动的项目下。
希望可以提供帮助。