ActionScript 3 添加图像;不同的位置

ActionScript 3 Adding images; different positions

简而言之,我有不同颜色的可点击对象。我希望这些颜色在被点击时出现在我的占位符中(将有 6 个)。我目前已经设法编写代码,以便在单击任何颜色时将其放置在第一个占位符中。

我可以通过什么方式进行编码以识别第一个占位符已被填充,并且一旦填充,第二个占位符应成为目标?

最好等到第 6 个填满后再停止,这样用户就可以看到所有 6 个。

我想像 for 循环这样的东西会很合适,但我不确定该怎么做。

目前看起来是这样的:

//Placeholder
var placeHolder1:MovieClip = new MovieClip();
    placeHolder1.x = 20;
    placeHolder1.y = 245;
    stage.addChild(placeHolder1);
//Placeholder2 (UNUSED CURRENTLY)
var placeHolder2:MovieClip = new MovieClip();
    placeHolder2.x = 60;
    placeHolder2.y = 245;
    stage.addChild(placeHolder2);


//Click and select colours
var newBlue:cBlue = new cBlue();
numBlue.addEventListener(MouseEvent.CLICK, fBlue)
function fBlue(e:MouseEvent){
    placeHolder1.addChild(newBlue);
}

var newRed:cRed = new cRed();
numRed.addEventListener(MouseEvent.CLICK, fRed)
function fRed(e:MouseEvent){
    placeHolder1.addChild(newRed);
}

首先,您可能想了解 Arrays (or Vectors)。 Arrays/Vectors 是列表,因此您可以将所有占位符放入一个数组中:

var placeHolders:Array = [placeHolder1, placeHolder2];

尽管如此,由于您的占位符创建有一个公式,您可能希望循环执行此操作以使其 DRYer (D R重复Y我们自己)

这个循环将创建 10 个占位符并将它们添加到数组中:

var placeholders:Array = new Array();

for(var i:int=0; i < 10; i++){
    var placeHolder = new Sprite(); //if your not using timelines, just use Sprite instead of MovieClip as it's less overhead
    placeHolder.x = 20 * (i + 1);  //i starts at 0, and goes to 9
    placeHolder1.y = 245;
    stage.addChild(placeHolder);  //add it to the display list
    placeholders.push(placeHolder);  //add it to the array
}

现在(继续干),将相同的事件侦听器附加到所有颜色按钮:

numBlue.addEventListener(MouseEvent.CLICK, selectColor);
numRed.addEventListener(MouseEvent.CLICK, selectColor);

在我调用的那个事件处理程序中 'selectColor'(参见代码注释)

function selectColor(e:Event):void {
    //get the first element in the array
    var placeHolder:Sprite = placeholders.shift(); //shift removes the first item from the array, and returns it
    placeHolder.addChild(e.currentTarget);  //e.currentTarget refers to item that you attached the event listener to, in this case either numBlue or numRed
}

总而言之,这会获取数组中的第一个占位符,从数组中删除该项目,然后添加被单击的颜色按钮作为该占位符的子项。