0

ゲームのランダムウェーブシステムに取り組んでいます。アイデアは、1000 ポイントごとに、約 50 の可能性から移動パターンが選択されるというものです。これは、選択したアイテムの速度、方向、およびイメージに影響します。うまくいくと思われる方法を考案しましたが、これを実行するのに多くのメモリが必要になるかどうかはわかりません。

public class engine extends MovieClip {

    private var countK:Number = 0;
    private var newWave:Boolean = true;

    public function engine() {
        stage.addEventListener(Event.ENTER_FRAME, update);
    }

    private function update():void {
        checkCount();
        checkNew();
    }

    private function checkCount():void {
        if (count => 1000) {
            newWave=true;
            count = 0;
        }
    }

    private function checkNew():void {
        if(newWave) {
            randomNumber();
            newWave=false
        }
    }

上記は、1000ポイントごとに乱数を生成するという私の簡単なアイデアです。ポイントは好きなように追加できます (「スコア」に 20 を追加し、同時に「カウント」に 20 を追加するだけです)。checkNew で乱数関数を使用できる場合は、別の関数を使用するつもりはありません。単純に読みやすくするためです。

                            var newEnemy:mEnemy =new mEnemy();
            stage.addChild(newEnemy);
            EnemyArray.push(newEnemy);
            trace(EnemyArray.length);

上記は、mEnemy のインスタンスをステージに追加できるコードです。今、私が解き始めているところですが、乱数を mEnemy の動作を変更する実行可能な方法に変換するにはどうすればよいですか?

mEnemy クラス内に 50 個の関数を用意し、addChild の直前に newEnemy.WAVEfuncton1(); のようなことを行うのが賢明ですか? ? その場合、if ステートメントを大量に記述せずに、関数を選択するようにコードを保存できますか?

それ以外の;

if (randomN==1) {
newEnemy.WAVEfunction1();
}
if (randomN==2) {
newEnemy.WAVEfunction2();
}
....

僕にできる;

newEnemy.WAVEfunction[randomN]();

これはまた、敵の内部で関数を使用することが最善のアイデアであると想定しています。代わりに、エンジン クラス内にビヘイビアを配置する方がよいでしょうか?

ご覧のとおり、私はプログラマーではありません。私はこの種の考え方に非常に慣れていないので、ゲームのパフォーマンスを損なうような間違いを犯したくありません (悪い習慣を身につけることは言うまでもありません!)。

時間を割いてこの質問を読んでくれたなら、ありがとう!私の無知を許していただけるなら、さらに感謝します!

4

2 に答える 2

0

波動関数が特定のタイプの単一の敵を作成するだけの場合、次のように各タイプの詳細を含む配列を作成する方が理にかなっています: (もちろん、敵がどのように機能するかを推測しています)

private const ENEMY_TYPES:Array = [
    {speed:1, direction:90, image:1},
    {speed:2, direction:45, image:2}
    ]

次に、 mEnemy() を変更して、指定した詳細に従って自分自身をセットアップします。

public function mEnemy(details:Object) {
    mySpeed = details.speed;
    ...

そうすれば、あなたはただ書くことができますnew mEnemy(ENEMY_TYPES[randomN]);

あるいは、多数の個別の波動関数が必要な場合は、[ ] 配列アクセス演算子を使用して、名前などでオブジェクトのプロパティにアクセスするnewEnemy(またはthis現在のオブジェクトを参照する) ことができます。

var exampleProperty:String = "Hello.";
this["exampleProperty"];

したがって、次のように記述して波動関数を実行できます。

newEnemy["WAVEfunction" + String(randomN)]();
于 2013-01-17T17:04:48.317 に答える