2016-04-12 5 views
1

私の目標は次のとおりです。メソッド(関数)

  1. は、スプライトのサブクラスを定義するには、この新しいクラス内の関数を呼び出すために、実行時にイベントを使用する船舶
  2. 呼ば

リンクされた.asファイル内のパッケージを使用してShipクラスを作成する方法を知りました。しかし、私はそのクラス内の関数にアクセスできないようです。誰かが私が間違っているのを見ることができますか?

var ShipMc:Ship = new Ship(); 
addChild(ShipMc);// This successfully adds an instance, so I know the class is working. 
addEventListener(MouseEvent.CLICK, ShipMc.addShip);//But this doesn't seem to run the function 

このコードでは、スプライトをインスタンス化のため正常に動作しますが、Ship.asファイル内のコード、特に機能は、機能していません。ランタイムエラーは発生しませんが、出力ウィンドウには何もトレースされません。

package 
{ 
    import flash.display.Sprite 

    public class Ship extends Sprite 
    { 
     public function addShip():void 
     { 
      trace("running addShip function")  
     } 
    } 
} 

フラッシュでコード化されたものが最後にAS2でした!

私はaddShip():voidとちょうどaddShip()を使って試したことを言及します。両方とも同じ応答。それは:void、右でしょうか?とにかく、どちらもスローされないという事実は、このコードセクションは読んでもいない、と私は思う。

ご協力いただきありがとうございます。私の髪を引き出します。

答えて

1

コードに問題があるため動作していません。

あなたは(それが空だ)まだ今どのクリック可能なオブジェクトが含まれているので、のはそれを避けるために、あなたのShipクラスに何かを追加することによって開始させなかったメインのタイムラインにMouseEvent.CLICKイベントリスナーをアタッチしていることを知っている必要があります。

public class Ship extends Sprite 
{ 
    // the constructor of your class, called when you instantiate this class 
    public function Ship() 
    { 
     // this code will draw an orange square 100*100px at (0, 0) 
     graphics.beginFill(0xff9900); 
     graphics.drawRect(0, 0, 100, 100); 
     graphics.endFill(); 
    } 
    public function addShip():void 
    { 
     trace("addShip function run"); 
    } 
} 

NB:あなたは、ステージでは何も持っていない場合でも動作しますステージにMouseEvent.CLICKイベントリスナーを添付することができます。

あなたのアプリをテストすると、ステージの左上隅にあるクリック可能なオレンジ色の四角形が表示されますが、コンパイラはリスナー関数(Ship.addShip()関数を待っているためエラー)(ArgumentError)ここでは)MouseEventオブジェクトを受け入れます。

だからエラーを回避するために、あなたのShip.addShip()機能は、例えば、このようなことができます:

public function addShip(e:MouseEvent):void 
{ 
    trace("addShip function run"); 
} 

次に、あなたのコードは動作するはずです。

あなたはまた、例えば、このように、Ship.addShip()関数を呼び出すことができ、あなたのメインのコード内の別のリスナー関数を使用して物事を簡素化することができます:あなたが取ることができる、すべての詳細については

var ShipMc:Ship = new Ship(); 
addChild(ShipMc); 

addEventListener(MouseEvent.CLICK, onMouseClick); 

function onMouseClick(e:MouseEvent): void 
{ 
    ShipMc.addShip(); 
} 

AS3 fundamentalsをご覧ください。ここで、AS3について知っておくべきことがすべて見つかります。

希望に応じることができます。

+0

ありがとうございました。とても有難い。 –

+0

@Nealこれがあなたの問題を解決した場合は、左側のチェックマークをクリックして答えとして受け入れてください。 – null

関連する問題