На мой взгляд, у вас есть три вопроса (вы должны были поставить их в конце своего вопроса вместо " Что не так с моим кодом? "). Один из основных принципов программирования - разбивать проблемы на более мелкие части.
- Как мне выстроить
ImageIcon
рядом друг с другом?
- Как убрать старую
ImageIcon
при переключении категорий?
- Как мне анимировать ВСЕ
ImageIcon
вместе, основываясь на положении мыши, с ограничениями по обе стороны?
Вопрос 1
Я не вижу ничего плохого, но просто проверьте, что при настройке imgicon.x
, что imgicon.width
действительно установлено.
Вопрос 2
Вместо того чтобы полагаться на numChildren
и getChildAt()
, я бы создал переменную-член массива currentIcons, а когда вы создаете новый ImageIcon
, просто поместите его в массив. Затем, когда вы захотите удалить их, вы можете просто перебрать массив следующим образом:
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, но у меня было меньше, чем случайно.