0

現在、初めてのフル フラッシュ ゲームを開発しており、複数のレベルを実装しているため、レベル選択画面を作成する必要があります。私は実際にこれを達成することに問題はありませんが、これを行う方法を知っている唯一の方法は、誰かが新しいレベルを通過するたびに別のレベル選択画面を利用できるようにすることです (つまり、レベル 2 を通過した後、2 つのボタンが利用可能になります) 、レベル 1 だけでなく、レベル 1 と 2 の場合)。

もちろん、これは非常に非効率的です。一度にすべてのレベルでこれを実行できるようにしたいです。9 つのレベルがあることは事前にわかっているので、3x3 のグリッド システムのボタンを使用できます (ループ用に 2 つ、x と y の位置に使用することもできますか?)。

レベル選択と他のページ間の移動は問題ありません。できるはずです。私の本当の問題は、実際のレベル選択画面を作成して、ゲームの進行度に応じてさまざまな量のクリック可能なボタンを表示することです。つまり、ユーザー用にいくつかのブール値を作成するだけで、レベルが渡されたら、それらのブール値を true に変更し、ブール値をリンクして、静的テキスト フィールドではなくボタンを作成します。次に、レベル選択画面に各ボタンを個別に配置しますか? このタイプのレベル選択画面を作成する方法について誰かが光を当てることができれば (光とはコード =p を意味します)、特にステージとテキストフィールドにボタンを追加する部分について、大いに感謝します。

また、9種類のボタンを作るのはもったいないですか?ボタンを 1 つだけ作成し、そのボタンのテキスト フィールドを変更してレベル番号を表示するとよいでしょう。動的テキスト フィールドを使用して、そのテキスト フィールド内のテキストを変更するだけでこれを達成できますか?

4

2 に答える 2

1

基本的にはい、あなたが適切だと思うことは何でもできます。これらすべてを準備するだけです。これは、実際のプログラミングの問題というよりも、ほとんどがアーキテクチャの問題です。進行状況については、利用可能な最高レベルを追跡して利用可能なレベルのみを表示するか、レベルの進行状況を表示することができます (1 つのレベルが 1 つ星で完了し、もう 1 つのレベルが 2 つ星で完了し、それらに星が付いたボタンを作成したとします)。 . また、たとえば Angry Birds のレベル セレクターを見ると、15 個のボタンがあるのに、なぜ 9 個にできないのでしょうか?

ステージにカスタム ボタンを追加する方法について - まず、レベル セレクター全体をスプライトにラップし、AS3 コードを記述して、特定の座標に配置されたレベル ボタン、閉じるボタン (別名「いいえ、他のレビューをしたい」レベルを選択する前のオプション" 1)、レベル名を含むテキスト フィールドなどの他のデータなど、適切と思われるものは何でも。例 (レベル ボタンのみ、ほとんどが疑似コード):

public class LevelSelector extends Sprite {
    private static const thumbnailClasses:Array=[Level01Bitmap,Level02Bitmap,...];
    // embed these
    private var gridXOffset:Number=60;
    private var gridYOffset:Number=60;
    private var gridXDimension:int=3; // how many buttons in row
    private var gridXBase:Number=30;
    private var gridYBase:Number=10;
    // other initialized data
    private var buttons:Vector.<LevelButton>; // buttons stored here
    public function LevelSelector() {
        buttons=new Vector.<LevelButton>();
        // other initialization
        for (var i:int=0;i<thumbnailClasses.length;i++) {
            var b:LevelButton=new LevelButton();
            b.x=(i%gridXDimension)*gridXOffset+gridXBase;
            b.y=Math.floor(i/gridXDimension)*gridYOffset+gridYBase;
            b.picture=(new thumbnailClasses[i]()).bitmapData;
            // assuming thumbnails are embedded bitmap class names
            addChild(b);
            b.enabled=levelIsAvailable(i); // query level availability
            b.stars=getLevelPerformance(i); // query how many stars to draw
            b.addEventListener(MouseEvent.CLICK,buttonPressed); // listen for mouse
            buttons.push(b);
        }
    }
    private function buttonPressed(e:MouseEvent):void {
        var level:int=buttons.indexOf(e.target);
        var b:LevelButton=e.target; // if need to do something with the button
        // query correctness and navigate to level screen
    }
}
于 2013-07-30T08:33:22.520 に答える
1

問題を小さなステップに分割する必要があるようです。Flash タイムラインまたは外部の .as クラスを使用しているかどうかはわかりません。画面に表示する内容をより柔軟に設定できるので、クラスを使用することをお勧めします。クラスの使用に慣れていない場合、次の内容はおそらく意味をなさないでしょう...

メインの Document.as クラスでは、プレーヤーが完了したレベルを追跡できます (おそらく、レベル番号に対応するブール値の配列で)。LevelSelect ページが必要な場合は、新しい LevelSelect ページを作成し、_levelsCompleted Array をパラメーターとして渡します。渡された配列は、必要な LevelButton の数を決定するために、LevelSelect クラス インスタンスで使用できます。渡されたブール配列をループし、インデックス値が true の場合は、LevelButton を追加します。各 LevelButton にはレベル番号 (ループ カウンター) を渡すことができ、それを TextField で使用して識別することができます (Array インデックスのインデックスは 0 であるため、レベル '1' は実際には '0' である可能性があることに注意してください)。

これが意味をなさない場合は、私に知らせてください。

于 2013-07-30T08:34:16.573 に答える