在我看来,你有三个问题(你应该把这些放在问题的末尾而不是“
我的代码怎么了?
"). 编程的主要原则之一是把问题分解成更小的部分。
-
我该如何排列
ImageIcon
在彼此旁边?
-
我怎样把旧的移走
图像图标
,切换类别时?
-
我如何制作所有
图像图标
基于鼠标的位置,两边都有约束?
问题1
我看不出有什么不对劲,不过在你准备的时候检查一下
imgicon.x
,那个
imgicon.width
实际上已经准备好了。
问题2
而不是依赖
numChildren
和
getChildAt()
,我将创建一个currentIcons数组成员变量,当您创建一个新的
图像图标
,只需将其推到阵列上。然后,当您要删除它们时,可以这样循环遍历数组:
for each (var cIcon:ImageIcon in currentIcons)
{
cIcon.removeEventListener(MouseEvent.CLICK, showImage);
removeChild(cIcon);
}
currentIcons = [];
如您所见,我也删除了我添加的所有侦听器。这是最佳实践。然后在我移除所有图标后清除数组。
问题3
我可以看出你的代码有一些问题。首先,在
image
已经准备好了,
k
还没准备好!
在这里您还可以使用
currentIcons
数组,但您可能不能使用
for each in
循环,因为这样会导致项目无序。只是正常的
for
循环会更好。
我还没有为moveIcon方法测试过这段代码,但是这个想法应该是可行的。不过,你可能得试一下:
public function moveIcon(e:Event):void
{
var speed:Number = Math.floor(this.mouseX / 20); // Removed "abs".
var imageBox:Number = currentIcons[0].width;
var edge:Number = 800 / 2;
for (var i:int = 0; i < currentIcons.length; i++)
{
var image:ImageIcon = currentIcons[i] as ImageIcon;
image.x += speed;
image.rotationY = Math.floor(image.x / 20);
var min:int = -edge + (i * imagebox);
if (image.x < min) image.x = min;
var max:int = edge - (imagebox * i);
if (image.x > max) image.x = max;
}
}
对不起,应该比上一个if语句中的大,但我有一个意外的小于。