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
}
总而言之,这会获取数组中的第一个占位符,从数组中删除该项目,然后添加被单击的颜色按钮作为该占位符的子项。
简而言之,我有不同颜色的可点击对象。我希望这些颜色在被点击时出现在我的占位符中(将有 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
}
总而言之,这会获取数组中的第一个占位符,从数组中删除该项目,然后添加被单击的颜色按钮作为该占位符的子项。