【问题标题】:as3 dropTarget return instance not the nameas3 dropTarget 返回实例不是名称
【发布时间】:2018-08-02 14:13:29
【问题描述】:

我试图将一个精灵放在另一个精灵上并获取放置目标的名称。当我在我的精灵中使用加载器时,结果不是精灵的名称,而是他的实例编号。我将在下面发布代码,希望有人可以帮助我。非常感谢!

package 
{
import flash.display.*; 
import flash.net.URLRequest;    
import flash.net.URLLoader; 
import flash.events.MouseEvent;

public class dragAndDrop extends MovieClip
    {

    public function dragAndDrop() 

    {
        // constructor code

        var imagineDrag:Sprite =  new Sprite;
            imagineDrag.x = 150;
            imagineDrag.y = 150;
            var fundalLoader:Loader = new Loader(); 
            var fundalLoaderURL:URLRequest = new URLRequest("butStartActiv.png");
            fundalLoader.load(fundalLoaderURL);
            imagineDrag.addChild(fundalLoader);
            imagineDrag.name = "Tinta";
            addChild(imagineDrag);

        var target1:Sprite = new Sprite();
            target1.graphics.beginFill(0xCCFF00);
            target1.graphics.drawRect(265, 100, 125, 125);
            target1.name = "casuta1";
            addChild(target1);


        var imagineDeTras:Sprite = new Sprite;
            imagineDeTras.x = 10;
            imagineDeTras.y = 10;
            var fundalLoader2:Loader = new Loader();    
            var fundalLoaderURL2:URLRequest = new URLRequest("butStartInactiv.png");
            fundalLoader2.load(fundalLoaderURL2);
            imagineDeTras.addChild(fundalLoader2);
            addChild(imagineDeTras);                


        imagineDeTras.addEventListener(MouseEvent.MOUSE_DOWN, dragObject);
            imagineDeTras.addEventListener(MouseEvent.MOUSE_UP, stopDragObject);    
            imagineDeTras.buttonMode = true;
            imagineDeTras.useHandCursor = true;
            imagineDeTras.mouseChildren = false;    

        function dragObject(evt:MouseEvent):void
            {
            evt.currentTarget.startDrag();
            trace("nume : " + evt.currentTarget.name)   
            }///// end drag object

        function stopDragObject(evt:MouseEvent):void
            {
            //trace("e.target.name " + e.target.name);
            trace("tinta atinsa este: " + evt.target.dropTarget.name);
            evt.target.stopDrag();  
            }//// end function stop drag    


    }/// end constructor

}// end class
}

当您将imagineDeTras 拖放到target1 上时,答案是“casuta1” 当我将imagineDeTras 拖放到imagineDrag 上时,答案是instance126 而不是“Tinta”。有人可以帮我解决这个问题吗?非常感谢!

【问题讨论】:

    标签: actionscript


    【解决方案1】:

    问题是您的代码中的一个小错误! 在你写的 dragObject 函数上:

    trace("nume : " + evt.**currentTarget**.name)

    这是正确的,但是您忘记在 stopDragObject 上使用 currentTarget 而不是 target!

    trace("tinta atinsa este: " + evt.**target**.dropTarget.name);
    

    您必须将 target 替换为 currentTarget 以使其跟踪您添加侦听器的项目名称,而不是 mouse_up 事件的子项名称触发。

    您还必须在 curretlntTarget 之后删除“dropTarge”

    如果你在理解 target 和 currentTarget 上有问题,你可以看到这个:AS3: Difference between target vs currentTarget

    【讨论】:

    • 我在你回答之前和之后尝试 currentTarget 我再试一次,但结果是一样的.....我仍然得到 instance196而不是名称 Tinta.... 我想这是因为在 imagineDeTras 我使用 loader 来加载图像.... ...无论如何谢谢你的回答先生@MESepehr .....
    • 为什么要在“target”后面加上“dropTarget”参数?去掉它。它使 dropTarget 的名称被跟踪。
    • 我添加了“dropTarget”,因为我想跟踪它......也许我没有解释得很好,,,,但是“dropTarget”是我的问题......他当 imagineDeTras 放在 imagineDrag 上时,不返回我希望的名称....我希望“dropTarget”返回名称 Tinta 和不是实例的名称......“dropTarget”在 target1 上完美运行,但在 imagineDrag 上出错......无论如何感谢您尝试解释.....
    • 哦,现在我明白了。 dropTarget 参数使被放置目标的最后一个子节点返回。它甚至可以是一个形状。所以你可以通过调用 dropTarget.parent 到达你的目的地!我通过编写一个 .parent 循环来返回我需要的元素,从而解决了这样的问题。
    猜你喜欢
    • 2014-09-28
    • 2014-01-31
    • 1970-01-01
    • 2019-08-08
    • 2016-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-08
    相关资源
    最近更新 更多