Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 12.08.2014, 01:23
skorpionnn333 вне форума Посмотреть профиль Отправить личное сообщение для skorpionnn333 Найти все сообщения от skorpionnn333
  № 1  
Ответить с цитированием
skorpionnn333

Регистрация: Jul 2014
Сообщений: 32
По умолчанию Удаление обьектов

Я хочу сделать так чтобы при окончании таймера удалялись все обьекты .Вот код в классе Main
Код AS3:
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 
		{
 
		}
 
 
	}
}
Вот код в классе ball
Код AS3:
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 минуту
Если что тут наверно много лишнего .Я только начал практиковать классы и сложно все применить как нужно

Старый 12.08.2014, 01:38
LifeIsRhythm вне форума Посмотреть профиль Отправить личное сообщение для LifeIsRhythm Найти все сообщения от LifeIsRhythm
  № 2  
Ответить с цитированием
LifeIsRhythm
[+1 22.07.14]
[+4 12.08.14]
[+1 09.02.15]

Регистрация: May 2014
Сообщений: 182
1. Таймер у Вас создается локально и будет удален после выполнения метода.
2. Удалить все из контайнера -
Код AS3:
container.removeChildren();
Добавлено через 1 минуту
3. Переменная без модификатора доступа, FD должен желтым предупреждение выводить.

Добавлено через 3 минуты
4. Зачем мячик в flyBall передаете?

Добавлено через 5 минут
5. Обращаетесь к элементу массива сто раз , нужно так -
Код AS3:
// до цикла...
var ball:Ball;
// в цикле...
ball = new Ball;
ball.x = 10;
addChild(ball);
array[i] = ball;

Старый 12.08.2014, 02:57
Моше Дауге вне форума Посмотреть профиль Отправить личное сообщение для Моше Дауге Найти все сообщения от Моше Дауге
  № 3  
Ответить с цитированием
Моше Дауге

Регистрация: Aug 2014
Сообщений: 5
Код AS3:
//Массив объектов:
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);
}

Старый 12.08.2014, 07:32
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 4  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
1. Таймер у Вас создается локально и будет удален после выполнения метода.
Никуда он не удалится. Во-первых к нему добавлен слушатель, который нигде не удаляется, соответственно существует ссылка, а во-вторых когда объект (на который нет ссылок) удалится, решает сборщик мусора. Это может произойти гораздо позднее, чем выполнится метод.

По теме:
Лучше вообще не добавлять слушатель ENTER_FRAME в каждом мяче, но раз уж здесь так, то надо и об удалении побеспокоиться.
Добавь в класс Ball метод dispose()
Код AS3:
public function dispose():void {
   this.removeEventListener(Event.ENTER_FRAME, cap);
   if (parent) parent.removeChild(this); // можно и сразу с дисплей листа снести.
}
Код AS3:
 
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; // сносим все из массива
 
}
Моше Дауге, почитайте про метод contains в справке. Где и как он ищет объекты.
__________________
Ко мне можно и нужно обращаться на ты)

Старый 12.08.2014, 11:40
skorpionnn333 вне форума Посмотреть профиль Отправить личное сообщение для skorpionnn333 Найти все сообщения от skorpionnn333
  № 5  
Ответить с цитированием
skorpionnn333

Регистрация: Jul 2014
Сообщений: 32
caseyryan.Спасибо большое за подробное обьяснение .Я узнал много нового из этого кода,теперь работает все ,а ball там был совершенно лишним я еще из старого кода забыл его удалить

Добавлено через 20 минут
Моше Дауге.Спасибо я прочту про метод contains

Старый 12.08.2014, 16:12
LifeIsRhythm вне форума Посмотреть профиль Отправить личное сообщение для LifeIsRhythm Найти все сообщения от LifeIsRhythm
  № 6  
Ответить с цитированием
LifeIsRhythm
[+1 22.07.14]
[+4 12.08.14]
[+1 09.02.15]

Регистрация: May 2014
Сообщений: 182
Цитата:
Никуда он не удалится. Во-первых к нему добавлен слушатель, который нигде не удаляется, соответственно существует ссылка, а во-вторых когда объект (на который нет ссылок) удалится, решает сборщик мусора. Это может произойти гораздо позднее, чем выполнится метод.
Если честно я знаю об этом, точнее строю предположения, ведь если есть слушатель, то объект уже не удалить. Но вчера в голову пришли слова... вот... теперь даже не знаю, радоваться, что читал эту тему в прошлом или высказаться по поводу последнего комментария от МОДЕРАТОРА.

Но как бы то ни было, как слушатель удалить и таймер если он локальный, caseyryan ?

Старый 12.08.2014, 16:45
skorpionnn333 вне форума Посмотреть профиль Отправить личное сообщение для skorpionnn333 Найти все сообщения от skorpionnn333
  № 7  
Ответить с цитированием
skorpionnn333

Регистрация: Jul 2014
Сообщений: 32
А как сделать всем эти обьектам разную скорость ?

Старый 12.08.2014, 16:53
LifeIsRhythm вне форума Посмотреть профиль Отправить личное сообщение для LifeIsRhythm Найти все сообщения от LifeIsRhythm
  № 8  
Ответить с цитированием
LifeIsRhythm
[+1 22.07.14]
[+4 12.08.14]
[+1 09.02.15]

Регистрация: May 2014
Сообщений: 182
Сидеть и месяц разбираться в анимации или скачать готовую, но так и не познать искусства оптимизации в as3 на уровне Брю Ли...

Старый 12.08.2014, 17:03
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 9  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
Но как бы то ни было, как слушатель удалить и таймер если он локальный, caseyryan ?
Без комментариев. Протри монитор от слюней, и смотри
__________________
Ко мне можно и нужно обращаться на ты)

Старый 12.08.2014, 17:11
LifeIsRhythm вне форума Посмотреть профиль Отправить личное сообщение для LifeIsRhythm Найти все сообщения от LifeIsRhythm
  № 10  
Ответить с цитированием
LifeIsRhythm
[+1 22.07.14]
[+4 12.08.14]
[+1 09.02.15]

Регистрация: May 2014
Сообщений: 182
Код AS3:
Я это уже показал. Протри монитор от слюней, и посмотри четвертый пост
Я не видел ответа, который по теме, точнее не читал и извиняюсь за предыдущий вопрос.
У меня нет слюней на мониторе.. Вы слишком часто о них говорите. Вы вообще часто говорите)))

Создать новую тему Ответ Часовой пояс GMT +4, время: 15:24.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 15:24.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.