2010-05-25 3 views
0

Я пробовал все. Массивы достаточно просты, так что я не знаю, почему это не работает:.массив не работает ActionScript 3

var menuList:Array = [menu_bag_mc,menu_chips_mc,menu_coke_mc,menu_cup_mc,menu_deodorant_mc,menu_fork_mc,menu_knife_mc,menu_lighter_mc,menu_milk_mc,menu_pill_mc,menu_rings_mc,menu_shampoo_mc,menu_spoon_mc,menu_straw_mc,menu_toothbrush_mc,menu_trashbag_mc,menu_water_mc]; 

function captureAllClicks(event:MouseEvent):void 
{ 
    trace(menuList.indexOf(event.target)); 
} 

stage.addEventListener(MouseEvent.CLICK, captureAllClicks); 

Каждый раз, когда я нажимаю на любой из элементов на сцене (которые все дали имена экземпляров, перечисленные выше, каждый из них является tweening movieclip, содержащий кнопку) Я получаю след -1. ЗАЧЕМ?!

edit2

Что должно произойти:

for each (var mc:MovieClip in menuList) mc.addEventListener(MouseEvent.CLICK, createContent); 


//right here, i need to make a variable that I can put in the "addchild" so that 
//for every one of the list items clicked, it adds a movieclip child with 
//the same name (such as menu_bag_mc from above) with "_frame" appended. 
var framevar:MovieClip = menuList[i] += "_frame"; 

function createContent(event:MouseEvent):void { 
    if(MovieClip(root).currentFrame == 850) { 
    while(MovieClip(root).numChildren > 1) 
    { 
     MovieClip(root).removeChild(MovieClip(root).getChildAt(MovieClip(root).numChildren - 1)); 
    } 
MovieClip(root).addChild (framevar); 
MovieClip(root).addChild (closeBtn); 
} 
else { 
MovieClip(root).addChild (framevar); 
MovieClip(root).addChild (closeBtn); 
MovieClip(root).gotoAndPlay(806); 
} 
} 

Если я не могу сделать переменную, нет никакого смысла в целом «для каждого» заявление вы вместе взятые ... на самом деле не любой point для массива, потому что мне все равно придется создать 20 строк кода для каждого отдельного. Какой смысл иметь массив, если вы не можете сделать из них переменные?

ответ

1

потому что вполне очевидно event.target похоже не в menuList.

наиболее вероятно объяснение есть, что у вашего MovieClip s есть дети, на которые нажимают и, следовательно, event.target.

Возможно, вы должны установить mouseChildren на false на все эти MovieClip s. Или вы могли бы зарегистрировать отдельные обработчик за мувиклип как это:

function captureAllClicks(event:MouseEvent):void { 
    trace(menuList.indexOf(event.currentTarget)); 
} 
for each (var mc:MovieClip in menuList) mc.addEventListener(MouseEvent.CLICK, captureAllClicks); 

Greetz
back2dos

+0

Это работало превосходно. Не могли бы вы объяснить mouseChildren? У меня будет функция, выполняемая на каждом из этих элементов списка, так как вы думаете, что это будет работать лучше? – steve

+0

Я отредактировал выше, чтобы показать новый код, который у меня есть, который выполняет эту функцию для всех элементов, и я возвращаю правильные параметры. Является ли «для каждого», которое вы указали лучше? Кроме того, есть ли способ получить фактическое имя для каждого элемента списка? Так что я могу использовать его как переменную в новой функции ... – steve

+0

Чтобы уточнить ... скажем, что параметр в функции - 'addChild (menu_bag_mc_frame);' есть способ (например, menuList [i]) для доступа переменную и добавить "_frame"? Так что для каждой функции он загружает новый элемент из библиотеки? – steve

0

почему бы вам не попробовать event.currentTarget вместо event.target

Кроме того, чтобы помочь себе неприятность стрелять, почему Дон» t вы просто отслеживаете event.target и отслеживаете event.currentTarget. Вы также можете прокручивать массив и отслеживать все объекты в нем. Затем получите лучшее визуальное представление о том, что происходит.

+0

'event.currentTarget' всегда будет« stage »в этом случае, что менее бесполезно. – back2dos

+0

@ back2dos Я всегда получаю e.target и e.currentTarget запутался. –