![]() |
|
||||||||||
|
|
|
|||||
|
Регистрация: Jan 2010
Сообщений: 23
|
Здравствуйте! Только начала изучать Flash, поэтому вопрос может показаться глуповатым. И все же, побродив по интернету, так и не нашла ответ на нужный мне вопрос.
Мне надо удались экземпляр класса по значению его атрибута. Т.е. есть класс _myClass, в основном классе я создала экземпляры методом addChild(), и теперь мне надо удалить со сцены некоторые экземпляры, если, например, _myClass.x = 0. Как мне это сделать? Метод getChildAt(), прокрученный в цикле, выдает ошибку. Может, я где-то запуталась? |
|
|||||
|
покажите пациента-то )
__________________
http://cleptoman.free-lance.ru achivements: дважды благословлен на воровство. осеяный благодатью |
|
|||||
|
Регистрация: Jan 2010
Сообщений: 23
|
Сейчас попробую объяснить. Делаю тетрис. Есть класс 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 по его атрибуту х - местоположению в стакане тетриса. Могу, конечно, выслать весь код, но он большой |
|
|||||
|
Создайте массив, куда будете складывать ваши брики.
Потом, в функции где вы двигаете ваши брики, проходите по каждому элементу массива и проверяйте его «y» и удаляйте, если требуется. private function moveBricks():void { for each(var item:Brick in _bricks) { item.y += 20; if( item.y > ваша_высота ) { var deleteMovie:Brick = _bricks.shift(item); deleteMovie.parent.removeChild(deleteMovie); //исправил //отпишите от всех лисенеров, если есть и затем удалаяте deleteMovie = null; } } }
__________________
O God! The Aftermath. Последний раз редактировалось dmitriev; 01.02.2010 в 00:09. |
|
|||||
|
Регистрация: Jan 2010
Сообщений: 23
|
Спасибо! Я как раз по этому пути только что пошла, буду пробовать!
Добавлено через 2 часа 47 минут Неа, такая идея не прокатила. Выдает ошибку на removeChild - удаляемый объект должен быть потомком вызывающего. Причем в массив все записалось правильно. Получается, я из класса тетрис пытаюсь напрямую удалить экземпляр класса brick, который был создан в классе блок. Т.е. надо сначала обратиться к классу block? И никак не обойти? |
|
|||||
|
Регистрация: Jan 2010
Сообщений: 23
|
removeChild(_block); for (k = 0; k < _block.numBricks; k++) { bricks.push(_block.getChildAt(k)); _brick = new Brick(); addChild(_brick); _brick.x = bricks[l].x; _brick.y = bricks[l].y; Но! При попытке удалить элемент из массива выдает ту же ошибку. Если массив не менять, удаляет первый брик как надо, но потом, соответственно, выдает ошибку о не соответствии индексов (в массиве элемент есть, а потомка я удалила). ![]() Добавлено через 13 минут function DeleteLine(y:int) : void { for (var i: int = 0; i<l; i++) { if (bricks[i].y == y) { var deleteMovie:Brick = bricks[i]; trace(deleteMovie.y); deleteMovie.parent.removeChild(deleteMovie); deleteMovie = null; bricks[i] = []; } } } Добавлено через 2 часа 17 минут Функция shift у массива работает, но без аргумента Такая конструкция удаляет первые брики, потом выдает ошибку. Помогите, пожалуйста, я уже все просмотрела, а решения найти не могу |
|
|||||
|
я думаю можно как то так попробовать
|
|
|||||
|
на
__________________
Тут мужик танцует и поёт про флэш |
|
|||||
|
Регистрация: Jan 2010
Сообщений: 23
|
И в первом, и во втором варианте выдает ошибку:
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, время: 11:13. |
|
|
« Предыдущая тема | Следующая тема » |
|
|