![]() |
Удаление потомков по атрибутам
Здравствуйте! Только начала изучать Flash, поэтому вопрос может показаться глуповатым. И все же, побродив по интернету, так и не нашла ответ на нужный мне вопрос.
Мне надо удались экземпляр класса по значению его атрибута. Т.е. есть класс _myClass, в основном классе я создала экземпляры методом addChild(), и теперь мне надо удалить со сцены некоторые экземпляры, если, например, _myClass.x = 0. Как мне это сделать? Метод getChildAt(), прокрученный в цикле, выдает ошибку. Может, я где-то запуталась? |
покажите пациента-то )
|
Сейчас попробую объяснить. Делаю тетрис. Есть класс Tetris - основной, класс block -
public function Block(index:int, initPos:Array) { super(); _index = index; for each(var pos:Object in initPos) { var brick:Brick = new Brick(); к addChild(brick); ... И, соответсвенно класс Brick. Т.е. блоки состоят из кирпичиков. Все сделала, все работает, но когда хочу удалить заполненную строку, не знаю, как обратиться к нужному экземпляру. function DeleteByY() : void { for (var i: int = 1; i< numChildren; i++) { getChildAt(1); //trace(_brick.x); } } Начала писать вот что, но запуталась. Получается, мне надо удалить brick, который потомок класса block по его атрибуту х - местоположению в стакане тетриса. Могу, конечно, выслать весь код, но он большой |
Создайте массив, куда будете складывать ваши брики.
Код AS3:
Код AS3:
|
Спасибо! Я как раз по этому пути только что пошла, буду пробовать!
Добавлено через 2 часа 47 минут Неа, такая идея не прокатила. Выдает ошибку на removeChild - удаляемый объект должен быть потомком вызывающего. Причем в массив все записалось правильно. Получается, я из класса тетрис пытаюсь напрямую удалить экземпляр класса brick, который был создан в классе блок. Т.е. надо сначала обратиться к классу block? И никак не обойти? |
после того как фигурка упала, можно всех ее детей перекладывать в общий спрайт (тетрис или как его + заносить в массив), а дальше уже по вышеописанному алгоритму. В ас3 обьекты могут менять контейнеры не напрягаясь.
|
Код AS3:
Но! При попытке удалить элемент из массива выдает ту же ошибку. Если массив не менять, удаляет первый брик как надо, но потом, соответственно, выдает ошибку о не соответствии индексов (в массиве элемент есть, а потомка я удалила). :wacko: Добавлено через 13 минут Код AS3:
Добавлено через 2 часа 17 минут Функция shift у массива работает, но без аргумента Код AS3:
|
Код AS3:
|
Код AS3:
Код AS3:
|
И в первом, и во втором варианте выдает ошибку:
ArgumentError: Error #2025: The supplied DisplayObject must be a child of the caller. at flash.display:: DisplayObjectContainer/removeChild() at Tetris/ :: onTimer() at flash.utils::Timer/flash.utils:Timer::_timerDispatch() at flash.utils::Timer/flash.utils:Timer::tick() Добавлено через 4 часа 28 минут bricks.splice(i, 1); вот на эту строчку выдает A term is undefined and has no properties. и первую ошибку. Как же работать с массивом? |
| Часовой пояс GMT +4, время: 12:38. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.