|
|
|||||
Регистрация: Jul 2014
Сообщений: 32
|
Удаление обьектов
Я хочу сделать так чтобы при окончании таймера удалялись все обьекты .Вот код в классе Main
package { import flash.display.MovieClip; import flash.display.Sprite; import flash.events.Event; import flash.events.TimerEvent; import flash.utils.Timer; public class Main extends Sprite { public var ball:Ball = new Ball; var arr:Array = new Array; public function Main():void { if (stage) init(); else addEventListener(Event.ADDED_TO_STAGE, init); } private function init(e:Event = null):void { removeEventListener(Event.ADDED_TO_STAGE, init); spawnBall(); } public function spawnBall():void { for (var i:uint = 0; i < 10; i++) { arr[i] = new Ball; addChild(arr[i]); arr[i].x = i * 50; } flyBall(ball); } public function flyBall(ball:Ball):void { var time:Timer = new Timer (25, 100); time.start (); time.addEventListener(TimerEvent.TIMER_COMPLETE, removeBall); } function removeBall(e:TimerEvent):void { } } } package { import flash.display.Sprite; import flash.events.Event; public class Ball extends Sprite { public var symb:Ballsymb = new Ballsymb; public function Ball() { addChild(symb); this.addEventListener(Event.ENTER_FRAME, cap); } public function cap(e:Event):void { this.y ++; } } } Если что тут наверно много лишнего .Я только начал практиковать классы и сложно все применить как нужно |
|
|||||
[+1 22.07.14]
[+4 12.08.14] [+1 09.02.15] Регистрация: May 2014
Сообщений: 182
|
1. Таймер у Вас создается локально и будет удален после выполнения метода.
2. Удалить все из контайнера - Добавлено через 1 минуту 3. Переменная без модификатора доступа, FD должен желтым предупреждение выводить. Добавлено через 3 минуты 4. Зачем мячик в flyBall передаете? Добавлено через 5 минут 5. Обращаетесь к элементу массива сто раз , нужно так - |
|
|||||
Регистрация: Aug 2014
Сообщений: 5
|
//Массив объектов: private const OBJECTS:Array = []; //Удаление объектов: private function removeObjects():void { const LENGTH_OBJECT:int = OBJECTS.length; //Длина массива объектов: for (var indexCurrentObject:int = 0; indexCurrentObject < LENGTH_OBJECT; indexCurrentObject++) { const CURRENT_OBJECT:Sprite = OBJECTS[indexCurrentObject]; //Текущий объект: //Если объект есть на сцене, то: if (this.contains(CURRENT_OBJECT)) { //Удаляем его: this.removeChild(CURRENT_OBJECT); } } //Очищаем массив объектов: this.OBJECTS.splice(0, LENGTH_OBJECT); } |
|
|||||
Цитата:
По теме: Лучше вообще не добавлять слушатель ENTER_FRAME в каждом мяче, но раз уж здесь так, то надо и об удалении побеспокоиться. Добавь в класс Ball метод dispose() public function dispose():void { this.removeEventListener(Event.ENTER_FRAME, cap); if (parent) parent.removeChild(this); // можно и сразу с дисплей листа снести. } function removeBall(e:TimerEvent):void { e.target.removeEventListener(TimerEvent.TIMER_COMPLETE, removeBall); // не забываем удалить слушатель с таймера if (ball) ball.dispose(); // не понятно зачем у тебя этот шарик создан отдельно от тех, что в массиве, но тем не менее, сносим его for (var i:String in arr) arr[i].dispose(); // убиваем так же шарики в массиве arr.length = 0; // сносим все из массива }
__________________
Ко мне можно и нужно обращаться на ты) |
|
|||||
Регистрация: Jul 2014
Сообщений: 32
|
caseyryan.Спасибо большое за подробное обьяснение .Я узнал много нового из этого кода,теперь работает все ,а ball там был совершенно лишним я еще из старого кода забыл его удалить
Добавлено через 20 минут Моше Дауге.Спасибо я прочту про метод contains |
|
|||||
[+1 22.07.14]
[+4 12.08.14] [+1 09.02.15] Регистрация: May 2014
Сообщений: 182
|
Цитата:
Но как бы то ни было, как слушатель удалить и таймер если он локальный, caseyryan ? |
|
|||||
Регистрация: Jul 2014
Сообщений: 32
|
А как сделать всем эти обьектам разную скорость ?
|
|
|||||
[+1 22.07.14]
[+4 12.08.14] [+1 09.02.15] Регистрация: May 2014
Сообщений: 182
|
Сидеть и месяц разбираться в анимации или скачать готовую, но так и не познать искусства оптимизации в as3 на уровне Брю Ли...
|
|
|||||
[+1 22.07.14]
[+4 12.08.14] [+1 09.02.15] Регистрация: May 2014
Сообщений: 182
|
Я не видел ответа, который по теме, точнее не читал и извиняюсь за предыдущий вопрос.
У меня нет слюней на мониторе.. Вы слишком часто о них говорите. Вы вообще часто говорите))) |
Часовой пояс GMT +4, время: 10:27. |
|
« Предыдущая тема | Следующая тема » |
|
|