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

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

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

Регистрация: Mar 2009
Сообщений: 105
По умолчанию Удаление экземпляра класса

Здравствуйте!

Проблема в следующем.

Есть класс, в котором создается множество текстовый полей, в соответствии с кол-вом букв строки-параметра strWord.

Код AS1/AS2:
class MyWords extends MovieClip {
	var strWord:String = null;
	function MyWords(str:String) {
		strWord = str;
	}
 
	function DrawWords() {
           var arr:Array = [];
           arr = strWord.split("");
           //...
           for (var i = 1; i<arr.length; i++) {
		_root.createTextField("pole_"+i,-i,dx,dy,10,16*koef);
           }
 
           //...
}
Через промежуток времени создаю экземпляр класса с различными строками
Код AS1/AS2:
var inter:Number;
var exam:MyWords;
var i:Number = 0;
var arr:Array = [];
arr[0] = "Hello world!!!";
arr[1] = "Hello world!!! Hello world!!! Hello world!!!";
arr[2] = "Hello world!!! Hello world!!!";
arr[3] = "Hello world!!! Hello world!!! Hello world!!!Hello world!!! Hello world!!!";
arr[4] = "Hello!";
 
inter = setInterval(this, "Print", 2000);
 
function Print() {
 
  exam = new MyWords(arr[i]);
 
  exam.DrawWords();
  i++;
  if (i==arr.length) {
	clearInterval(inter);
  }
}
Почему-то не происходит удаление предыдущих экземпляров (т.е. на экране остаются предыдущие экземпляры). Я думал, что команда new удаляет все, что было до того.

Подскажите, пожалуйста, в чем ошибка?

Спасибо!


Последний раз редактировалось zelik; 16.07.2009 в 01:27.
Старый 16.07.2009, 01:45
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 2  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Ошибка в том, что нельзя создавать экземпляры MovieClip оператором new.
А значит, Вы ручками должны удалить мусор, оставшийся в виде TetxField'ов, созданных методом DrawWords. Гы. Вы же их создаете в _root. Так какова лешева они должны бы были удалиться с помощью new? В общем, разговор турка с персом.
__________________
Воспитан в TimeZero. Работаю в Mail.ru.


Последний раз редактировалось dimarik; 16.07.2009 в 01:49.
Старый 16.07.2009, 07:36
Juice_Green вне форума Посмотреть профиль Отправить личное сообщение для Juice_Green Посетить домашнюю страницу Juice_Green Найти все сообщения от Juice_Green
  № 3  
Ответить с цитированием
Juice_Green
 
Аватар для Juice_Green

Регистрация: Dec 2005
Адрес: Новосибирск
Сообщений: 529
Отправить сообщение для Juice_Green с помощью ICQ Отправить сообщение для Juice_Green с помощью Skype™
@zelik:
и зачем тут наследовываться от MovieClip, объясните уж будьте добры.
вы правда используете возможности базового класса?

Старый 16.07.2009, 09:13
zelik вне форума Посмотреть профиль Отправить личное сообщение для zelik Найти все сообщения от zelik
  № 4  
Ответить с цитированием
zelik

Регистрация: Mar 2009
Сообщений: 105
да собственно не использую.
раньше вы уже писали, что нет необходимости. А до того написали, как сделать, чтобы код работал.
Получается, что, единственное, почему наследую, т.к. код работает

Сейчас вот написал без наследования.
В классе обявил
Код AS1/AS2:
var container:MovieClip;
а затем

Код AS1/AS2:
for (var i = 1; i<arr.length; i++) {
		container.createTextField("pole_"+i,-i,dx,dy,10,16*koef);
           }
И каким образом теперь работать с классом? Т.е. если я пишу в клипе

Код AS1/AS2:
exam = new MyWords(arr[i]);
 
  exam.DrawWords();
то ничего не отображается?? Почему?
Чего-то не понимаю, пожалуйста, объясните.

Спасибо!

Старый 16.07.2009, 09:25
Juice_Green вне форума Посмотреть профиль Отправить личное сообщение для Juice_Green Посетить домашнюю страницу Juice_Green Найти все сообщения от Juice_Green
  № 5  
Ответить с цитированием
Juice_Green
 
Аватар для Juice_Green

Регистрация: Dec 2005
Адрес: Новосибирск
Сообщений: 529
Отправить сообщение для Juice_Green с помощью ICQ Отправить сообщение для Juice_Green с помощью Skype™
вы создаете TextField, а container у вас undefined, для начала создайте контейнер, например с помощью createEmptyMovieClip

Старый 16.07.2009, 09:29
zelik вне форума Посмотреть профиль Отправить личное сообщение для zelik Найти все сообщения от zelik
  № 6  
Ответить с цитированием
zelik

Регистрация: Mar 2009
Сообщений: 105
а создание контейнера делать от this или _root?

Добавлено через 5 минут
если делаю от _root, то получается тоже, что описано в 1-м посте...

Старый 16.07.2009, 09:49
Juice_Green вне форума Посмотреть профиль Отправить личное сообщение для Juice_Green Посетить домашнюю страницу Juice_Green Найти все сообщения от Juice_Green
  № 7  
Ответить с цитированием
Juice_Green
 
Аватар для Juice_Green

Регистрация: Dec 2005
Адрес: Новосибирск
Сообщений: 529
Отправить сообщение для Juice_Green с помощью ICQ Отправить сообщение для Juice_Green с помощью Skype™
все верно,
для удаления храните ссылки на созданные объекты, тогда и сможете удалять созданные уже мувики

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

Регистрация: Mar 2009
Сообщений: 105
что значит хранить ссылки на объекты? где хранить?
Можно объяснить на примере
вот у меня есть свойтсво класса
Код AS1/AS2:
var container:MovieClip = _root.createEmptyMovieClip("container1", _root.getNextHighestDepth());
дальше в клипе container создается множество TextField.
Код AS1/AS2:
for (var i = 1; i<arr.length; i++) {
		container.createTextField("pole_"+i,-i,dx,dy,10,16*koef);
           }
так мне нужно хранить ссылки на все TextField или достаточно только на container, в котором они находятся? Удаление производить функцией внутри класса?
поясните, пожалуйста!

Старый 16.07.2009, 11:55
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 9  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Храните в ассоциативном массиве.

Код AS1/AS2:
var storage:	Object = new Object();
var len:		Number = arr.length;
var name:		String;
var ref:		TextField;
var i:			Number = 1;
 
for (; i < len; i++) {
	name = "pole_" + i;
	ref = container.createTextField(name, -i, dx, dy, 10, 16 * koef);
	storage[name] = ref;
}
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Старый 16.07.2009, 12:00
Juice_Green вне форума Посмотреть профиль Отправить личное сообщение для Juice_Green Посетить домашнюю страницу Juice_Green Найти все сообщения от Juice_Green
  № 10  
Ответить с цитированием
Juice_Green
 
Аватар для Juice_Green

Регистрация: Dec 2005
Адрес: Новосибирск
Сообщений: 529
Отправить сообщение для Juice_Green с помощью ICQ Отправить сообщение для Juice_Green с помощью Skype™
1. создаем экземпляр
2. сохраняем ссылку в массив
3. когда надо удалить - пробегаем по циклу массив и delete массив[i]
4. в деструкторе класса реализуем удаление мувиклипа со сцены

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

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

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


 


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


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