|
|
|||||
.
|
Цитата:
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]; } Последний раз редактировалось dimarik; 16.07.2009 в 12:19. |
|
|||||
to @dimarik:
просто человек я так понял ооп изучает, поэтому я про классы и веду разговор |
|
|||||
Регистрация: Mar 2009
Сообщений: 105
|
dimarik, спасибо за реализацию, с ассоциативным массивом понятно.
а функция удаления должна вызываться в деструкторе? а сам деструктор вызывается при команде new? |
|
|||||
.
|
Нет в AS деструкторов. Можете написать метод destroy и вызывать его, когда объект готов идти в расход. Оператор new инстанцирует объект указанного класса и вызывает его конструктор. Удаления никакого не происходит. Удаление объекта из памяти осуществляет Garbage Collector, если на объект не осталось ни одной ссылки. Т.о. создание и удаление объектов никак не связаны.
|
|
|||||
dimarik, точно нет, спасибо что напомнили, а то давно на as2 не писал уже
|
|
|||||
Регистрация: Mar 2009
Сообщений: 105
|
Спасибо большое!
Вот, что получилось в итоге: MyWords.as 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; } } } } 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); } } а может опытные посетители форума еще что подскажут, что не правильно,.. как сделать более корректно. Еще раз всем спасибо! |
|
|||||
.
|
От рута в классе откажитесь. Передавайте область видимости, в которой будет строится container через сеттер или public переменную. Это более универсальное решение. Вы сможете создавать контейнер в любом мувиклипе.
И откажитесь он написания имен методов с прописной буквы. |
|
|||||
Регистрация: Mar 2009
Сообщений: 105
|
извините за мою безграммотность, но чем определяется область видимости клипа?
вы имеете ввиду сделать что-то типа такого: MyWords.as first.fla но это почему-то не работает...? |
|
|||||
.
|
Поизучайте. На практике не применял. Может содержать ошибки.
/** * @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; } } } } Последний раз редактировалось dimarik; 16.07.2009 в 18:40. |
Часовой пояс GMT +4, время: 18:03. |
|
« Предыдущая тема | Следующая тема » |
|
|