2011-08-02 8 views
1

Spriteを拡張するクラスを作成しようとしていて、いくつかのプライベートプロパティが接続されていて、gettersとsetterを使用してこれらのプロパティを読み書きできます。 シンプルですが、コンパイラがこのエラーをスローします。 "静的型flash.display:Spriteを持つ参照によって、おそらく未定義のプロパティスピードのアクセスが発生します。 MovieClipオブジェクトを拡張するようにクラスを設定すると機能します。 誰かが私にこの背後にある論理を説明できますか?どうして私はゲッターとセッターをスプライトで使うことができないのですか?ここでSpriteでgetter/setterメソッドを使用するときのエラー

はサンプルコードです:

package { 

    import flash.display.Sprite; 

    public class Vehicle extends Sprite{ 

     private var _speed:uint = 3; 


     public function get speed():uint { 
      return _speed; 
     } 

     public function set speed(value:uint):void { 
      _speed = value; 
     } 


     public function Vehicle() { 
      super(); 
     } 

    } 

} 
+3

をあなたが入力していますあなたの車両のインスタンスはスプライト型かVehicle型ですか?前者の場合は、あなたの小道具を手に入れる/セットする前に、それをビークルとしてキャストする必要があります。 – Nolsto

+0

スプライトでget/setを使うことができますが、別の場所で問題があるはずです。 Vehicleをインスタンス化するコードと、アクセサを使用する場所を記述してください。 – shanethehat

+0

私はこのようにしていました: var vehicle:Sprite = new Vehicle(); addChild(vehicle); –

答えて

2

スプライトは、ムービークリップのような動的ではありませんので、あなたは、のような車のインスタンスを宣言する必要があります。だから、

、これを行うには、動作しません:

var vehicle:Sprite = new Vehicle; 
vehicle.speed = 5; 

これは動作するはずです:

var vehicle:Vehicle= new Vehicle; 
vehicle.speed = 5; 

var vehicle:Sprite = new Vehicle; 
Vehicle(vehicle).speed = 5; //We cast the vehicle instance to Vehicle type. 

また、我々はasオペレータ用いて鋳造することができます

var vehicle:Sprite = new Vehicle; 
(vehicle as Vehicle).speed = 5; //We cast the vehicle instance to Vehicle type. 
+0

コンストラクタ関数を呼び出すことを忘れないでください:new Vehicle(); –

+0

@マークKnol:私はコンストラクタを呼び出している、おそらくあなたは2番目のケースと混同されている、私は車両のインスタンスを車両にキャストしていた... – goliatone

+1

@golia、マークは、カッコを使用しないようにあなたの選択によって誤解されている可能性があります。パラメータがないときには省略するように働きますが、Adobeの推奨するコードの標準は怒っていますし、それらを認識できない人は混乱を避けることができます。 –

関連する問題