7

Flash Professional で大まかなゲーム エンジン フレームワークの構築を開始しました。ステージにドラッグして AS3 からアクセスできるプロパティを割り当てることができるオブジェクトを Flash ライブラリに作成する方法に興味があります。

例:
スイッチ オブジェクト (照明のスイッチなど) を作成して、プレイヤーがそれを操作すると、部屋の照明が点灯するなど、特定のコードがトリガーされるようにします。

Flash には、Flash Professional 環境内でプロパティを定義できる UI コンポーネントが組み込まれていることを理解しています (下の画像を参照)。また、基本的に自分のレベル ファイルを持つことができるように、独自のカスタム スタイル コンポーネントを作成する方法があるかどうか疑問に思っています。フラッシュ (.fla) で開き、ライブラリからスイッチ コンポーネントをドラッグして、制御しているライトなどの情報や必要なその他の情報を入力します。

フラッシュ コンポーネント パラメータ

(上記は、私が探しているパラメータ コントロールのタイプの例です)

フラッシュ UIComponent クラスの拡張について少し読んだことがありますが、それは私が望むものに対して過剰であるため、正しいアプローチではないと感じています。私が望むのは、いくつかの基本的なパラメーターをライブラリー・ステージ・インスタンスから AS3 に渡すことだけです。インスタンス名を介してデータを渡したくありません。より複雑なやり取りをしたい場合、これは非常に面倒に思えるからです。

ありがとう!

4

4 に答える 4

0

人々が言おうとしているのは、すべてをデータ駆動型にすることができるので、IDEとデータを組み合わせて最終的なゲームを思いつくことができるということだと思います。

しかし、これを考慮してください...それはあなたが望むものかもしれません。

たとえば、BaseSwitchクラスがある場合:

public Class BaseSwitch extends MovieClip {
   private var _lightName:String;
   private var _light:Light;
   public function get lightName():String {
      return lightName;
   }
   public function set lightName(value:String):void {
      if (value != _lightName) {
        _lightnName = value;
        //Note I don't advocate having children reach into their parents like this,
        //but you sound like you don't want the parent involved in the process, so
        //this is one way you could do it.
        if (parent.hasOwnProperty(lightName) && parent[lightName] is Light) {
           _light = parent[lightName];
        } else {
           trace('Could not find light', _lightName);
        }

      }
   }
   //other code to listen for gestures and operate the light
}

ここで、スイッチで特定のライト名を操作する場合は、ライブラリインスタンスを作成し、その基本クラスをBaseSwitchに設定します。基本クラスを設定したダイアログを閉じると、クラスパスでクラスが見つからなかったというダイアログが表示され、クラスが生成されます。これを、lightNameを設定するクラスに置き換えます。ライブラリインスタンスと同じ名前でルートディレクトリに新しいAS3クラスを作成します。次のようになります。

public class SpecificSwitch {
   public function SpecificSwitch() {
      super();
      lightName = 'theSwitch';
   }
}

他の可能な選択肢は、親クラスが名前に基づいてスイッチのインスタンスをライトのインスタンスと一致させることを含みます。したがって、light1とlight1Switchが見つかった場合、スイッチへのライトへの参照を与えるか、単にマッピングを設定します。独自のイベントリスニングシステム。

于 2012-06-16T14:05:17.323 に答える
0

This can be easily done.

Component(s) are wrong approach in my opinion.

Firstly you would want to setup Actionscript linkage / label your Library item. In Library Panel. - Right Click on "yourMC" >> click "Properties". - In Properties dialog Tick "Export for Action Script" - Then Name your Class eg "yourMC_Class"

now MC is ready to be referenced in your code.

next you would want to Dynamically add your "yourMC" from library to stage. which can be done like such.

// first reference library item

var yourMC_ref:yourMC_Class = new yourMC_Class();

// Then load dynamic mc item into var

var your_MC_OBJ = yourMC_ref;

// then add your MC to stage.

this.addChild(your_MC_OBJ);
your_MC_OBJ.x = 200;
your_MC_OBJ.y = 100;

in a nutshell that's how I add library items to stage.

Obviously thats the basic function / code.

In a project I would have all code in an external class, in which case you would just set vars as public vars

public var yourMC_ref:yourMC_Class = new yourMC_Class();
public var your_MC_OBJ = yourMC_ref;

and the last 3 lines of code into a public function

public function ADD_First_MC()
{
       this.addChild(your_MC_OBJ);
       your_MC_OBJ.x = 200;
       your_MC_OBJ.y = 100;
}

Now 'your_MC_OBJ' can be used in more complex ways.

eg. to create a light switch there are many options depending on how you need to approch functionality. eg. Apply a different MC library item to "your_MC_OBJ" play specific frame within MCs.

However If it was me I would just use mouse function to switch light on or off using addChild removeChild. eg.

public var LightON = 0;
public var yourMC_ref:yourMC_Class = new yourMC_Class();
public var your_MC_OBJ = yourMC_ref;

then create a public function that handles on / off events

public function LightON_OFF()
     {
         if(LightON == 1)
            {
               this.addChild(your_MC_OBJ);
               your_MC_OBJ.x = 200;
               your_MC_OBJ.y = 100;
            }
         if(LightON == 0)
            {
               this.removeChild(your_MC_OBJ);
            }
     }

Hope this helps.

于 2016-05-02T18:27:04.730 に答える
0

「スイッチ」ムービー クリップを作成し、「ライト」ムービー クリップと同じようにアクション クリップにエクスポートします。メイン クラスの .as ファイルでは、addChild (クリップ) を使用してそれらをステージに挿入し、クリック リスナーを「スイッチ」ムービー クリップに追加して「ライト」を制御します。

于 2014-04-14T23:19:40.720 に答える