2012-02-04 1 views
0

私はこれをしばらく前から取り組もうとしていました。 dispatchEventなどのようなさまざまなアイデアがポップアップしていますが、これを行うための明確で簡単な方法はありません。Flash AS3は、別のクラスのクラスから関数を呼び出しています

私がしようとしているのは、ドキュメントクラスとは別のクラス(ただし、同じフォルダ内にある)から関数を呼び出すことです。 具体的には、オブジェクトを 'スポーン'し、そのオブジェクトのクラス内でMain.asの関数を実行したいとします。 私の瞬間のスニペットは以下の通りです。 Main.asで

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

スポーン関数はclass_Object内のパブリック関数であるが、私は試してみて、これを実行すると、私はエラーを取得する:「エラー#1006:産卵は関数ではありません」 私が 'object.spawn();'を取り出すと、オブジェクトを細かく追加します。

私は何かを明らかに不足しているしなければならないが、何

おかげ

EDITを把握することはできません

の問題は、私は、内のクラスへのパスを指定するために忘れていた固定私のライブラリオブジェクトのリンケージとして、私はそれをやったと思った!

答えて

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. 

、あなたは「借入」他のクラスからの機能であり、独自の機能を追加/置き換えます。しかし、インスタンスを持っている限り、それが「パブリック」メソッドであれば、そのインスタンスが利用可能な場所から外部から利用可能になります。それがあなたのコメントに答えるのに役立つかどうかはわかりません。

+0

私が見るああ、私は、静的クラスに純粋にそれを貼らそれをクリアするためのおかげで実現しませんでした。しかし、私が正しく理解していれば、それらは2つの別々のクラスであり、1つのインスタンスではありません。だから、私は、メインクラスのMovieClipを拡張し、私のオブジェクトクラスはスプライトを拡張しています。これは、メインファイルがオブジェクトファイルを拡張した場合にのみ機能します。助けてくれてありがとう! – Artharos

+0

@Artharosがあなたのコメントをうまくカバーするために私の答えを更新しました。 –

+0

これは間違いなく助けになりました。クラスの理解が深まっています。ありがとうございます!しかし、上記のようにオブジェクトクラスのインスタンスを起動して呼び出しているので、上記のようにメソッドを呼び出すと、エラーがスローされます。変数を設定してEnter_Frame関数内からメソッドを呼び出すことが重要であるかどうかはわかりません。すべきではありません。ああ、あなたがしたのと同じように静的メソッドを呼び出そうとすると、エラーが発生します。 '1061:未定義のメソッドを呼び出す'メソッド '静的型のクラスを持つ参照を介して'ありがとうございました。 – Artharos

0
あなたclass_Object内部メソッドはパブリックにする必要があり

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(); 
関連する問題