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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 16.07.2009, 12:15
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 11  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Цитата:
Сообщение от Juice_Green Посмотреть сообщение
3. когда надо удалить - пробегаем по циклу массив и delete массив[i]
4. в деструкторе класса реализуем удаление мувиклипа со сцены
Код AS1/AS2:
var storage:	Object = new Object();
var name:		String;
 
// Создание
for (var i:Number = 1; i < arr.length; i++) {
	name = "pole_" + i;
	storage[name] = container.createTextField(name, -i, dx, dy, 10, 16 * koef);
}
 
// Удаление
var j:		String;
for (j in storage) {
	storage[j].removeTextField();
	delete storage[j];
}
__________________
Воспитан в TimeZero. Работаю в Mail.ru.


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

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

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

Регистрация: Mar 2009
Сообщений: 105
dimarik, спасибо за реализацию, с ассоциативным массивом понятно.

а функция удаления должна вызываться в деструкторе?
а сам деструктор вызывается при команде new?

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

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Нет в AS деструкторов. Можете написать метод destroy и вызывать его, когда объект готов идти в расход. Оператор new инстанцирует объект указанного класса и вызывает его конструктор. Удаления никакого не происходит. Удаление объекта из памяти осуществляет Garbage Collector, если на объект не осталось ни одной ссылки. Т.о. создание и удаление объектов никак не связаны.
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

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

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

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

Регистрация: Mar 2009
Сообщений: 105
Спасибо большое!
Вот, что получилось в итоге:
MyWords.as
Код AS1/AS2:
class MyWords {
	var strWord:String = null;
	var container:MovieClip;
	var storage:Object;
 
	function MyWords() {
	}
 
	function DeleteTF() {
		var j:String;
		for (j in storage) {
			storage[j].removeTextField();
			delete storage[j];
		}
		container.removeMovieClip();
 
	}
 
	function DrawWords() {
		storage = new Object();
		container = _root.createEmptyMovieClip("container1", _root.getNextHighestDepth());
		var name_tmp:String;
		var my_array = new Array();
		my_array = strWord.split("");
 
		var dx = 10;
		var dy = 10;
 
		for (var i = 0; i<my_array.length; i++) {
			dx += 15;
			name_tmp = "pole_"+i;
			storage[name_tmp] = container.createTextField(name_tmp, -i, dx, dy, 10, 16);
			container[name_tmp].autoSize = true;
			container[name_tmp].selectable = false;
			container[name_tmp].text = my_array[i];
			if (dx>300) {
				dx = 10;
				dy += 15;
			}
		}
	}
}
first.fla

Код AS1/AS2:
var exam:MyWords = new 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!";
var inter:Number;
inter = setInterval(this, "Print", 1200);
 
function Print() {
	exam.strWord = arr[i];
	exam.DeleteTF();
	exam.DrawWords();
 
	i++;
	if (i == arr.length) {
		clearInterval(inter);
	}
}
может кому-то пригодится...

а может опытные посетители форума еще что подскажут, что не правильно,.. как сделать более корректно.

Еще раз всем спасибо!

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

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
От рута в классе откажитесь. Передавайте область видимости, в которой будет строится container через сеттер или public переменную. Это более универсальное решение. Вы сможете создавать контейнер в любом мувиклипе.

И откажитесь он написания имен методов с прописной буквы.
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

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

Регистрация: Mar 2009
Сообщений: 105
извините за мою безграммотность, но чем определяется область видимости клипа?
вы имеете ввиду сделать что-то типа такого:
MyWords.as
Код AS1/AS2:
	function SetContainer(mv:MovieClip) {
		container = mv;
	}
first.fla
Код AS1/AS2:
var cont:MovieClip  = this.createEmptyMovieClip("container1", this.getNextHighestDepth());
exam.SetContainer(cont);
но это почему-то не работает...?

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

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


Код AS1/AS2:
/**
 *  @author				Dimarik
 *  @version			1.0
 *  @langversion		2.0
 *  @playerversion		7.0
 *
 *  Мега хрень
 *
 */
 
class MyWords {
 
	//-------------------------------------------------------------------------
	//
	//    Class's variables
	//
	//-------------------------------------------------------------------------
 
	public static var offsetX:			Number = 10;
 
	public static var offsetY:			Number = 10;
 
 
	private static var instanceCounter:	Number = 0;
 
	//-------------------------------------------------------------------------
	//
	//    Constructor
	//
	//-------------------------------------------------------------------------
 
	public function MyWords() {
		super();
		instanceCounter++;
	}
 
	//-------------------------------------------------------------------------
	//
	//    Properties
	//
	//-------------------------------------------------------------------------
 
	//---------------------------------
	//  parent
	//---------------------------------
	private var $parent:	MovieClip;
 
	public function set parent(value:MovieClip):Void {
		if (this.$parent == value) return;
		this.$parent = value || null;
 
		// Рендерим, если есть где и если есть что
		if (this.$parent && this._data) this.update();
		else this.clear();
	}
 
	public function get parent():MovieClip {
		return this.$parent || null;
	}
 
	//---------------------------------
	//  data
	//---------------------------------
	private var _data:		String = '';
 
	public function set data(value:String):Void {
		if (this._data == value) return;
 
		// Рендерим, если есть где и если есть что
		if (this.$parent && this._data) this.update();
		else this.clear();
	}
 
	public function get data():String {
		return this._data;
	}
 
	//-------------------------------------------------------------------------
	//
	//    Private variables
	//
	//-------------------------------------------------------------------------
 
	private var _container:	MovieClip;
 
	//-------------------------------------------------------------------------
	//
	//    Private methods
	//
	//-------------------------------------------------------------------------
 
	private function clear() {
		if (!this._container) return; // Уже очищали
 
		// Удаляем все текстовые поля из контейнера
		var object:	Object;
 
		for (var j:String in this._container) {
			object = this._container[i];
			if (object instanceof TextField) TextField(object).removeTextField();
		}
 
		this._container.removeMovieClip();
		this._container = null;
	}
 
	private function update() {
		this._container = this.$parent.createEmptyMovieClip(
				"container$" + instanceCounter,
				 this.$parent.getNextHighestDepth()
		);
 
		var array:		Array = this._data.split("");
 
		var dx:			Number = offsetX;
		var dy:			Number = offsetY;
 
		var textField:	TextField;
 
		for (var i = 0; i < array.length; i++) {
			dx += 15;
 
			textField = this._container.createTextField(String(i), i, dx, dy, 10, 16);
			textField.autoSize = true;
			textField.selectable = false;
			textField.text = array[i];
 
			if ( dx > 300) {
				dx = 10;
				dy += 15;
			}
		}
	}
 
}
__________________
Воспитан в TimeZero. Работаю в Mail.ru.


Последний раз редактировалось dimarik; 16.07.2009 в 18:40.
Старый 16.07.2009, 18:49
nOobCrafter вне форума Посмотреть профиль Отправить личное сообщение для nOobCrafter Найти все сообщения от nOobCrafter
  № 20  
Ответить с цитированием
nOobCrafter

Регистрация: Nov 2008
Сообщений: 894
Записей в блоге: 1
а почему клип-контейнер не передавать одним из аргументов? ну и соотвественно делать проверку, если не передан то создавать самому..? или это плохая практика?

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

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

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


 


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


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