PDA

Просмотр полной версии : Ошибка при создании массива с объектами


WinSTOP
10.04.2013, 20:11
Вообщем, захотелось мне изучать ac3 с нуля и подробно. Переменные и TextField усвоил хорошо, но теперь поставил задачу выучить массивы. Вроде всё норм идёт, но тут изучил новые функции и попытался их перенести в class. Много ошибок исправил а вот с этими мучаюсь.
1) F:\Flash\Flash_games\FlashArray\main.as, Line 14 1120: Access of undefined property list.
2) F:\Flash\Flash_games\FlashArray\main.as, Line 14 1120: Access of undefined property setupSquare.

Вот сам код:
package {

import flash.display.MovieClip;
import flash.events.MouseEvent;

public class main extends MovieClip {

public var list:Array = [objBox1, objBox2, objBox3];

public function main() {

}

list.forEach(setupSquare);

public function setupSquare(square:MovieClip, index:int, array:Array):void {
square.addEventListener(MouseEvent.CLICK, onSquareClick);
}

public function onSquareClick(me:MouseEvent):void {
trace(me.currentTarget.name);
}
}
}

В чём ошибка.
Класс main прикреплён на сцену.
ОШИБКА походу вот здесь list.forEach(setupSquare); но как исправить не знаю.

chamele0n
10.04.2013, 20:56
чтото вы батенька совсем косите

public function main() {
list.forEach(setupSquare);
}

alatar
10.04.2013, 20:58
Строка list.forEach(setupSquare); должна находиться в одном из методов, а не в теле класса.

WinSTOP
10.04.2013, 20:58
TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null".
at main/setupSquare()
at Array$/_forEach()
at Array/http://adobe.com/AS3/2006/builtin::forEach()
at main()

WinSTOP
10.04.2013, 21:02
Вот скрин

illuzor
10.04.2013, 21:15
Заполнять массив нужно в конструкторе.

package {

import flash.display.MovieClip;
import flash.events.MouseEvent;

public class main extends MovieClip {

public var list:Array;

public function main() {
list = [objBox1, objBox2, objBox3];
list.forEach(setupSquare);
}

public function setupSquare(square:MovieClip, index:int, array:Array):void {
square.addEventListener(MouseEvent.CLICK, onSquareClick);
}

public function onSquareClick(me:MouseEvent):void {
trace(me.currentTarget.name);
}
}
}

WinSTOP
10.04.2013, 21:47
Спасибо.