【问题标题】:Error 1009, I don't really understand why it happens错误 1009,我真的不明白为什么会这样
【发布时间】:2013-12-12 17:40:10
【问题描述】:

我想在鼠标悬停时显示项目名称。并且项目名称变量在项目类中。我在现场有一个叫做苹果的物体。我在代码中将其命名为“Apple”。当我在同一代码的函数中调用 itemName 时,它​​说当我将鼠标悬停在对象上时它没有定义。如果我在函数外跟踪 apple.itemName,它就可以工作。我不知道为什么。这是我的代码:

我场景中的代码:

import flash.events.MouseEvent;
import inventory.inventorySystem;
import inventory.item;

var IS:inventorySystem;
var IT:item;

apple.itemName = "Apple";
apple.itemIcon = new AppleIcon();
apple.addEventListener(MouseEvent.MOUSE_OVER, showItemNameF);

function showItemNameF(Event:MouseEvent){
    var itemNameBox:TextField;
    itemNameBox.text = this.itemName;
    itemNameBox.x = mouseX;
    itemNameBox.y = mouseY;
}

物品类别:

package inventory {

    import flash.display.MovieClip;

    public class item extends MovieClip{

            public var itemName:String;
        public var itemIcon:MovieClip;
    }
}

【问题讨论】:

    标签: actionscript-3 flash function class inventory


    【解决方案1】:

    this 在您的事件处理函数中没有引用您的苹果实例。 (您可能来自 AS2 吗?)this 是对您的侦听器代码所在的类/时间线的引用,并且没有定义任何 itemName 变量。为了能够检索名称,您必须执行以下操作:

    Apple(e.currentTarget).itemName //assuming that Apple is your class of the apple instance.
    

    【讨论】:

    • 非常感谢,正如你所说,它工作得很好,但我真的不明白它的作用。我理解“这”与时间线有关的问题,而不是与班级有关,而是“项目(e.currentTarget)”到底在做什么?
    • event.currentTarget 返回您的事件侦听器附加到的对象,在您的情况下,这意味着苹果实例(您有 apple.addEventListener
    • 是的,我注意到了这一点并将我的事件更改为仅 e。现在我明白了这笔交易。我还有一个问题,为什么我不能将同一个类分配给多个对象。我认为这是可能的。现在我在场景中添加了一个梨对象并尝试制作另一个项目,但我无法将其类设为“项目”。
    • 我不太清楚你的意思,但考虑到这是另一个话题,你应该考虑创建一个新问题并在那里更好地解释它。
    猜你喜欢
    • 2020-03-28
    • 2023-04-10
    • 2016-02-03
    • 1970-01-01
    • 2016-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-17
    相关资源
    最近更新 更多