基本的にはい、あなたが適切だと思うことは何でもできます。これらすべてを準備するだけです。これは、実際のプログラミングの問題というよりも、ほとんどがアーキテクチャの問題です。進行状況については、利用可能な最高レベルを追跡して利用可能なレベルのみを表示するか、レベルの進行状況を表示することができます (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
}
}