Flash AS3从单独的类中的类调用函数

时间:2012-02-04 18:53:09

标签: flash actionscript-3 class function

我一直在努力尝试解决这个问题。突然出现了各种各样的想法,比如dispatchEvent等,但似乎没有什么是明确,简单的方法。

我要做的是从类文件中调用一个函数(但在同一个文件夹中)。 具体来说,我想'生成'一个对象并在我的Main.as中运行该对象类中的一个函数。 我现在的片段如下:

在Main.as中:

var object:class_Object = new class_Object();
object.spawn();
addChild(object);

spawn函数是class_Object中的公共函数,但是当我尝试运行它时,我得到错误:'错误#1006:spawn不是函数' 如果我取出'object.spawn();'代码它可以很好地添加对象。

我必须遗漏一些明显的东西,但无法弄清楚是什么

由于

修改

解决了这个问题,我忘了在我的Library对象的AS链接中指定类的路径,以为我已经这样做了!

2 个答案:

答案 0 :(得分:4)

您将该方法标记为static。这意味着它属于本身而不属于该类的实例

要调用定义的方法,您会说:

class_Object.spawn()

然而,这可能不是预期的,但如果没有看到实施,很难说。从定义中删除static关键字会将其附加到实例,并且可以按照您描述的方式进行访问。

有关此主题的adobe文档,请参阅here


要回答你的评论,一个简单的方法来思考它是一个“类”是创建“实例”的蓝图。

所以,当你说new class_Object()时,你告诉“蓝图”“构建”蓝图的新实例。在蓝图中,您可以定义应该可用于实例(或实例方法)的方法/属性。此外,您还可以定义“蓝图”本身(或静态方法)可用的方法/属性。

所以使用Car

的经典示例
public class Car {

    public function startEngine():void {
        // This is an instance method, it will be available to
        // any instance of a car, or new Car();

        // Note: "this" in this context refers to the current instance of the car
        // that the method is being called from
    }

    public static function compare(Car car1, Car car2):bool {
        // This method belongs to the blueprint of a car

        // Note: "this" doesn't make any sense in this context, because we 
        // aren't talking about a particular instance.
    }
} 

然后例如:

var mercedes:Car = new Car();
var bmw:Car = new Car();

mercedes.startEngine(); // call an instance method. notice we call it from a particular instance of a car.
Car.compare(mercedes, bmw); // call an static method. notice we call it from the class of Car.

当你从另一个类“扩展”时,你正在“借用”另一个类的功能并添加/替换你自己的功能。但是只要你有一个实例,如果它是一个“公共”方法,那么它将从那个实例可用的外部可用。我不知道这是否有助于回答您的评论。

答案 1 :(得分:0)

你需要在class_Object public

中创建方法
package my.package{
    public class class_Object(){
         public function class_Object(){
             //constructor 
         }

         public function spawn():void{
               //spawn code
         }

    }
}



var classObject:class_Object = new class_Object();
classObject.spawn();