我是一名老师,在你们中的一些人的帮助下,我设法为孩子们创造了非常基本的文字游戏,他们可以用字母创建单词。 SWF | FLA
然而,一旦他们从舞台一侧的原件克隆出来,我就无法继续拖放这些字母。有人能告诉我如何将此功能添加到现有代码中吗?import flash.display.MovieClip;
for (var i=1; i<27; i++)
{
this["object" + i].addEventListener(MouseEvent.MOUSE_DOWN, onStart);
this["object" + i].addEventListener(MouseEvent.MOUSE_UP, onStop);
}
var sx = 0,sy = 0;
function onStart(e)
{
sx = e.currentTarget.x;
sy = e.currentTarget.y;
e.currentTarget.startDrag();
}
function onStop(e)
{
if (e.target.dropTarget != null &&
e.target.dropTarget.parent == dest)
{
var objectClass:Class =
getDefinitionByName(getQualifiedClassName(e.currentTarget)) as Class;
var copy:MovieClip = new objectClass();
this.addChild(copy);
copy.x = e.currentTarget.x;
copy.y = e.currentTarget.y;
}
e.currentTarget.x = sx;
e.currentTarget.y = sy;
e.currentTarget.stopDrag();
}
我还想加入一个“垃圾箱”,孩子们可以拖动信件,如果他们不想再让他们上台。关于如何添加这个的任何想法将不胜感激。
非常感谢。
答案 0 :(得分:1)
如果您想要拖动对象的类似行为(即拖动后,会创建一个副本)
将这些行添加到您的onStop(e)
,就像这样,
copy.addEventListener(MouseEvent.MOUSE_DOWN, onStart);
copy.addEventListener(MouseEvent.MOUSE_UP, onStop);
但是如果你只想拖动并阻止副本,那么要么创建另一个函数说dragCopiedObject()
并应用拖动逻辑而不是复制那个新函数
或
在同一onStop(e)
函数中识别复制对象或原始对象,并防止复制。
如果你没有得到它,请告诉我,我会详细解释给你。
为了在bin中删除复制的对象,停止拖动后,检查与bin对象的碰撞。有关更多信息,请参阅,
copiedObject.hitTestObject(binObject)
例如
if(copiedObject.hitTestObject(binObject)) {
removeChild(copiedObject);
}
更新:要识别复制的对象,请使用name
属性,如下所示:
copy.name =“copy”;
我修改了你的代码,
function onStop(e)
{
if ( e.target.dropTarget != null &&
e.target.dropTarget.parent == dest &&
e.currentTarget.name != "copy" ) //This is newly added
{
var objectClass:Class =
getDefinitionByName(getQualifiedClassName(e.currentTarget)) as Class;
var copy:MovieClip = new objectClass();
copy.name = "copy"; //This is newly added
this.addChild(copy);
copy.x = e.currentTarget.x;
copy.y = e.currentTarget.y;
e.currentTarget.x = sx;
e.currentTarget.y = sy;
copy.addEventListener(MouseEvent.MOUSE_DOWN, onStart);
copy.addEventListener(MouseEvent.MOUSE_UP, onStop);
}
e.currentTarget.stopDrag();
}