基本上是的,你可以做任何你认为合适的事情,只要为这一切做好准备。这主要是架构问题,而不是实际的编程问题。关于进度,您可以跟踪可用的最高级别并仅显示可用的级别,或显示级别进度(例如,一个级别完成了 1 星,另一个有 2 星,然后您制作带有星星的按钮)等. 另外,你可以看看愤怒的小鸟关卡选择器,它有 15 个按钮,你为什么不能做出 9 个?
关于如何向舞台添加自定义按钮 - 首先,最好将整个关卡选择器包装到 Sprite 中,为其编写 AS3 代码,将关卡按钮放置在特定坐标处,一个关闭按钮(又名“不,我想查看其他选择级别之前的选项“一),其他数据(例如具有级别名称的文本字段等),无论您认为合适。一个例子(只有级别按钮,主要是伪代码):
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
}
}