2009-08-16 10 views
0

私は、すべて私のアニメーションを経て、別のムービークリップ(私に時間を要した)上で右スポットに剣ホルダーを置く「SwordHolder」と呼ばれるムービークリップシンボルを作りました。私はSwordHolderのムービークリップのシンボルでイメージを変えることができると思ったので、私はそれをすべて行いました。ムービークリップシンボルに直接アクセスするにはどうすればいいですか? - ActionScript 3.0の

私は本当に苦労しているのですが、それは新しいインスタンスを作成することなく(欲しいものではないことは明らかですが)swordholderムービークリップのシンボルを使ってイメージを変更/追加/削除することです。

は、どのように私はそれの新しいインスタンスを作成せずに、直接(私のライブラリ内の)ムービークリップにアクセスできますか?私はちょうど[var refSwordHolder:SwordHolder; refSwordHolder.addChild(剣);]しかし、それは私がそれを行うことを許可していないようです。また

速く助け、より良い...私は数時間以内にこれを理解する必要があります:(

ありがとう!

+1

あなたのSwordHolderがあなたのライブラリにある場合は、ライブラリ内のSwordHolderを編集することができます。その後、作成したすべてのSwordHolderインスタンスに加えられた変更が適用されます。 – David

答えて

0

このSwordHolderクラスをシングルトンにするのはいかがですか...これは良い候補のようです。

シングルトンは、おそらく最も簡単なデザインパターンです。アイデアは、このパターンに従うことによって、アプリケーション全体を通して作成されたクラスのインスタンスが1つだけ存在することを確認することです。

SharedObjectはその例です。新しいSharedObjectを使用してインスタンスを作成したりインスタンスを作成したりする前に、SharedObject.getLocal()またはgetRemote()を使用します。ここ

は大まかなアイデアです:

package yourcoolgame.assets{ 
    import flash.display.MovieClip; 

    public class SwordHolder extends MovieClip{ 
     private static var instance:SwordHolder; 

     public static function getInstance():SwordHolder { 
     if (instance == null) { 
      instance = new SwordHolder(new SingletonLock()); 
      } 
     return instance; 
     } 

     public function SwordHolder(lock:SingletonLock):void { 
     if (lock == null) { 
      throw new Error("Error: Instantiation failed: Use SwordHolder.getInstance() instead of new."); 
      } 
     } 
    } 
} 
internal class SingletonLock {} 

あなたは新しいを使用して作成し、インスタンスしようとすると、クラスが投げるとエラーする必要があります。 SwordHolderを使用してアプリケーションの任意の場所を作成してインスタンス化できます。getInstance() これは常に同じインスタンスへの参照になります。あなたは子供などを追加することができます

もしこれがあなたが必要以上であり、あなたがIDEを使用しているので簡単なものを探しているなら...別のシンボル(他の剣)を追加することができますそのクリップのフレームとラベルを使用すると、あなたのようなものがあります。

public function setSword(swordID:String):void{ 
this.gotoAndStop(swordID); 
} 

希望します。

0

AのMovieClipシンボルはムービークリップのサブクラスです。あなたは定義する必要があります

クラスは単に青写真であるため、addChild()をクラスに追加することはできません。ディスプレイリストに存在しません。

私が知る限り、そのような振る舞いを可能にするためには、クラスをAS3で完全に記述する必要があります。

これが役に立ちます。 (あなたがでなければならないムービークリップを使用しているため)使用すると、Flash CS3を使用している場合

+0

ありがとうございましたLior、これは本当にバマーです、私は私のコード全体をやり直さなければならないことを意味します! –

+0

もう一度、私が知る限り。他のいくつかの詳細を提供することができるかもしれない:) –

0

なぜあなただ​​けのエディタでシンボルを編集しませんか?フラッシュライブラリを見ると、名前が "SwordHolder"のシンボルが表示されます。シンボルをダブルクリックすると編集できます。これは最も簡単なオプションです。

あなたは右、あなたがActionScriptに書き出しラベルのボックスをチェックすることができますプロパティ]に移動し、ライブラリ内のシンボルをクリックした場合。以下のフィールドの1つは、Symbolに関連付けるクラスを指定できるClassフィールドです。だからSwordHolder(ファイルのクラスパスに配置)というクラスを作成し、この方法でシンボルに関連付けて、コンストラクタの各インスタンスに必要なコードを作成します。デフォルトでは、クラス名はシンボル名と同じです。

package 
{ 
    import flash.display.MovieClip; 

    public class SwordHolder extends MovieClip 
    { 
     public function SwordHolder() 
     { 
      super(); 

      // do what needs to be done 
     } 
    } 
} 
0

キャラクターへの参照はありませんか?それからあなたはヒエラキを介して剣への参照を得ることができるはずです。

静的変数にインスタンスの参照を保存するSwordHolderクラスを作成できます。このように:

package MyGame 
{ 
    import flash.display.MovieClip; 

    public class SwordHolder extends MovieClip 
    { 
     private static var _Instance:SwordHolder = null; 

     public function SwordHolder() 
     { 
      if(_Instance == null) 
       _Instance = this; 
      else 
       throw new Error("Only one SwordHolder instance allowed"); 
     } 

     public static function get Instance():SwordHolder 
     { 
      return _Instance; 
     } 
    } 
} 
-1

私は右のあなたを理解するのであれば、あなたはIDEでSwordHolderムービークリップのインスタンスを配置し、今あなたのSwordHolderムービークリップのインスタンスが表示された画像/スプライトを変更したいですか?

あなたはSwordHolderムービークリップに別の画像/スプライトをロードして表示するだけで、シングルトンのことをすることができます。そのため、SwordHolderクラスに表示されるイメージを変更する方法が必要です。

関連する問題