![]() |
Вызов метода объекта, находящегося в массиве
Добрый день,
столкнулся с неожиданной проблемой: не знаю, как вызвать метод из объекта, который находится в массиве. В AS3 в массиве можно держать переменные любых типов в отличии от с++. А посему инструкция someArray[i].myMethod() не годится здесь. Подскажите как? PS ну например создал массив, в него запихнул 10 спрайтов. Далее где-то в программе в цикле потребовалось для каждого обеъекта из массива, например, вызвать метод beginfill(color, alpha). Как? |
Почему не годится someArray[i].myMethod() ?
|
Цитата:
|
Проверить на тип объекта в массиве и вызывать нужный метод в зависимости от типа. typeof (для простых), is.
|
Предположим: someArray = [a:myObj, b:myObj, c:int, d:Sprite];
Вызываем: someArray[0].myMethod() //Круто! someArray[1].myMethod() //Круто! someArray[2].myMethod() //Бред... someArray[3].myMethod() //Бред... К тому же ставя точку (.) в списке доступных свойств моего метода нет. |
Код AS3:
true true false |
а, да. Можно ещё проверять наличие метода:
Код AS3:
|
Цитата:
|
DaFive, ни одни из редакторов такое не предсказывает для Array.
|
Ну если к типу не привести, то да.
я почему-то подумал не для элемента массива, а к объекту. |
>>ни одни из редакторов такое не предсказывает для Array.
FD если массив объявлен как var arr:Array/*Sprite*/; показывает весь арсенал Sprite для arr[1].| |
Цитата:
|
Всем спасибо за ответы!
|
> Это только в FD4?
нет |
Тут, может быть, удобнее не проверку типа использовать, а приведение к типу (если вы уверенны, что не спутаете объект), например:
Код AS3:
|
Уже сделал myArray[i].someMethod(). У меня в массив добавляются исключительно объекты одного типа.
|
Цитата:
|
> Это только в FD4?
это у них чуть ли не с FD2, еще с mtasc'их времен еще такая же плюшка есть для Proxy (class MyString extends Proxy /*String*/) и в FD4 еще для анонимных функций (var callback:Function/*(x:Number, s:String):void*/) |
Может лучше юзать вектор для строгой типизации элементов? и не вставлять туда элементы разного типа.
|
| Часовой пояс GMT +4, время: 05:32. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.