1

我已经尝试查找此内容,但似乎无法理解为什么下面给我上面的错误。我最近来的地方是:奇怪的错误 1006:%function_name% 不是一个函数,但它并不真正适用,因为下面是我的主时间线第 1 帧。我应该将它移到“Main.as”类吗?

function centerContent(refItem:Object, xOffset:int, yOffset:int) {
    this.x = (refItem.width - this.width)/2 + refItem.x + xOffset;
    this.y = (refItem.height - this.height)/2 + refItem.y + yOffset;
}

// center the item in relation to another item
a_mc.centerContent(another_mc, 0, 0);
4

2 回答 2

2

您正在尝试在您的 MovieClip 上创建一个函数原型。

要将此函数添加到 MovieClip,您可以扩展 MovieClip 类:

package
{
    import flash.display.DisplayObject;
    import flash.display.MovieClip;

    public class Example extends MovieClip
    {
        public function Example()
        {
            super();
        }

        public function centerContent(refItem:DisplayObject, xOffset:int, yOffset:int):void
        {
            this.x = (refItem.width - this.width) / 2 + refItem.x + xOffset;
            this.y = (refItem.height - this.height) / 2 + refItem.y + yOffset;
        }

    }
}

然后你可以调用你的centerContent函数:

var a_mc:Example = new Example();
a_mc.centerContent(obj, 0, 0);

否则,您可以将 any 传递DisplayObject给函数,如下所示:

public function centerContent(object:DisplayObject, refItem:DisplayObject, xOffset:int, yOffset:int):void
{
    object.x = (refItem.width - object.width) / 2 + refItem.x + xOffset;
    object.y = (refItem.height - object.height) / 2 + refItem.y + yOffset;
}

然后你可以调用:

centerContent(a_mc, obj, 0, 0);
于 2013-03-28T19:41:39.593 回答
1

您对范围的工作方式感到困惑。

基本上,centerContent是一个类的一部分,你试图从那个类的孩子那里调用它。它不是那样工作的。要调用该函数,必须从它的子类调用它(函数是一个对象,与 MovieClip 或 Sprite 或 String 相同)。

所以,这样看:

-Main
--Class1
---another_mc
---a_mc
----function1
----function2
---centerContent()
----refItem
----xOffset
----yOffset

您可以从其父对象调用一个对象(同样,函数是一个对象),而不是其他任何东西。因此,在该图像中,您可以从 a_mc 调用 function1 和 function2 ( a_mc.function1()and a_mc.function2()),但不能调用 centerContent( a_mc.centerContent),因为它不存在于 a_mc 中​​,而是存在于 Class1 中。因此,您可以调用Class1.centerContent()this.centerContent()用于正确的语法和范围)或Class1.a_mc但不能调用 a_mc.centerContent()。

于 2013-03-28T19:34:23.020 回答