【问题标题】:Action Script 3. How to get object's name from e.target?Actionscript 3. 如何从 e.target 获取对象名称?
【发布时间】:2015-03-29 15:36:14
【问题描述】:

我正在开发拖放游戏。我无法成功获取e.target 名称。

我正在使用以下内容:

private function stopDragObject(e:MouseEvent):void
{
    if (e.target.hitTestObject(e.target.name+"Field")) // here I should get name
    {
        trace(e.target + "Field");
        trace(e.target.name + "Field");
        trace(e.target.label + "Field");
        e.target.x = (e.target).x;
        e.target.y = (e.target).y;
    }

想法是我有对象Item1,如果它命中Item1Field 应该会成功。但现在我无法正确获取e.target 名称。我已将跟踪用于测试目的,它返回以下内容:

trace(e.target);
OUTPUT: [object Item1]Field

trace(e.target.name);
OUTPUT: instance55Field

trace(e.target.label);
OUTPUT: undefinedField

它应该返回Item1Field你有什么想法吗?


在下面我为对象添加监听器:

private function addListeners(... objects):void
{
    for (var i:int = 0; i < objects.length; i++)
    {
        objects[i].addEventListener(MouseEvent.MOUSE_DOWN, dragObject);
        objects[i].addEventListener(MouseEvent.MOUSE_UP, stopDragObject);
    }
}

【问题讨论】:

  • 你能上传 FLA 文件吗?尝试设置objects[i].mouseChildren = false;
  • 为什么需要 FLA 文件,不在乎舞台内有什么。此代码用于通过使用e.target.name 从舞台对象中获取Instance 名称,但如何获取由addChild 添加的对象名称以获取Item1Field 而不是[object Item1]Field。我需要在哪里设置objects[i].mouseChildren = false; 以及它的作用?
  • 什么是Item1Field?是类还是字符串?
  • 如果是班级,请使用此代码:Class(getDefinitionByName(getQualifiedClassName(e.target)))
  • 它是MovieClip对象,和Item1一样,所以在属性中它显示Class: Item1Field我会试着解释一下。例如,我在舞台上有 2 个对象:AS LinkageItem1Item1Field,玩家需要将 Item1 拖放到 Item1Field。我在 AS 3 中声明它如下:var item1:Item1 = new Item1();var item1field:Item1Field = new Item1Field();

标签: arrays actionscript-3 flash object events


【解决方案1】:

假设你有两个这样的对象:

var item1:Item1 = new Item1();
    item1.name = 'item1';
    addChild(item1);

var item1_field:Field = new Field();
    item1_field.name = 'item1_Field';
    addChild(item1_field);

所以你可以这样做来访问你的item1_field(名为item1_Field):

private function stopDragObject(e:MouseEvent):void
{
    var name:String = e.currentTarget.name + '_' + 'Field';

    trace(e.currentTarget.parent[name].name);   // gives : item1_Field
    trace(e.currentTarget.parent[name]);        // gives : [object Field]

    if (e.currentTarget.hitTestObject(e.currentTarget.parent[name])) 
    {
        // instructions here
    }
}

希望能有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-07
    • 1970-01-01
    • 2015-03-17
    • 2011-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多