![]() |
Работа с созданными на сцене объектами
Доброго времени суток. Кому не в лом,просветите пожалуйста человека.Вопрос у меня такой:
Есть несколько десятков обьектов: мувиков, текстовых полей прочего добра и есть код класса в отдельном .as файле. Как можно ими управлять оттудова? Например, в том файле есть массив с фразами var krabi:Array=[Пут, Медвед,Якун....,...] и есть 12 текстовых полей на сцене с именами tx1-tx12. Как туда вывести эти фразы?Я разобрался как обращаться к элементам способом типа: v.vector.<TextField>....v[i] и типа: object["name"+i].... но никак не соображу че с ними делать.Придумал только как создавать текстовые поля,но не как вывести в готовое на сцене поле с именем. По идее должен быть какой-то способ получить имя из обьекта на сцене(?),но я не нашел что это за оператор.Есть такой? Еще не дает покоя ,как вообще можно генерировать имена переменных из одного слова?Типа text100, "car"+"xx" В массиве только координаты Array[][], а в обьекте имя с точкой object.name1 (Камнями не кидать, я новичок в этом деле.) |
У вас должен быть класс текстового поля, который в конструтроре принимает значение, и записывает его в себя, а также метод setText, при вызове которого можно менять текст в текстовом поле на нужный
Код AS3:
Код AS3:
|
Цитата:
Код AS3:
|
Спасибо,Wolsh.Я знал-ответ где-то совсем рядом.
Спасибо, ISfet.Ваш способ,несколько видоизмененный,мне уже советовали. И он наверное самый правильный. Но есть проблема:у меня обрабатываемый текст подгружается: Код AS3:
Я так понимаю,это потому происходит,что вне класса нет подтверждения event для окончания загрузки? Как справиться с этой бедой и сделать значение myArray публичным? Или не париться и использовать this["name"+i].someMetodOfSomeClass= value? |
У Вас какая-то каша в голове сейчас, почитайте про синхронную и асинхронную работу. Вкратце: код выполняется последовательно, весь блок, и это происходит "в одном кадре", занимая миллисекунды времени. На то, чтобы загрузить Ваш текстовый файл, времени требуется в разы больше. То есть когда выполняется код, этих данных просто НЕТ. Совсем НЕТ. Вообще. И никакие хитрости с this[] не помогут плееру узнать здесь и сейчас мгновенно, какие данные хранятся где-то на удаленном сервере. Они не могут стать ни публичными, ни традиционно воспитанными, пока не окончится процесс загрузки с удаленного сервера. Их надо ЖДАТЬ. Это называется асинхронность. Для этого существуют события, то есть что-то, что произойдет в неизвестный заранее момент времени. Не после чего-то, не перед чем-то, не в такой-то строке, и не в таком-то кадре, а фиг знает когда, и произойдет ли вообще. Однако, если вдруг когда-нибудь произойдет, лоадер (в данном случае) обязательно нам сообщит (вызовет обработчик события). И только после этого, то есть "пространственно" — в обработчике, — можно считать загруженные данные и начать ими пользоваться, то есть выполнять "дальнейший" код, который должен либо находиться в самом обработчике, либо в функции или цепочке функций, вызываемых из обработчика. Другими словами, нет никакой возможности написать свой класс загрузки данных и затем использовать его в основном коде синхронным способом
Код AS3:
Точно так же, как узнать высоту-ширину незагруженной картинки и т.п. асинхронные сущности. |
Цитата:
|
Wolsh,я не совсем правильно выразился,но вы ухватили самую суть.Я абсолютный новичок и называю вещи как придется. Под еvent я как раз и подразумевал запускаемый fnComplete(обработчик) после окончания загрузки. Как вы и говорите у меня вся обработка происходит в функциях внутри обработчика и
Код AS3:
Я не мог понять:на сцене у меня имена tx1-tx12,а в коде я умею хранить значения в переменных типа object.name(нельзя же на сцене обозвать поле как тх.1?) и вы показали как с помощью this этой точки избежать. Теперь у меня внутри обработчика есть 12 переменных типа tx1:TextField="Бежать, tx2:TextField="Ломать",.... и я хочу, чтобы обьявив в первом кадре MyClass: Код AS3:
Но эти переменные будут иметь null потому что не инициирован loader и я спросил на примере myArray как инициировать этот loader чтоб был не null.Я так понял если инициировать внутри пакета,то эти переменные станут доступны другим классам,если инициировать в кадре,то будут доступны в кадре?Короче,что я точно понял,так это ответ связан с асинхронной работой. (Не париться, я имел ввиду создавать текстовые поля в классе.Там уже все-равно какое имя.Можно вообще обращаться как к элементу массива) |
чтобы избежать путаницы и получить полноценный ответ, Вам нужно отказаться от полей созданных в ручную в адобиШлеш и создать их в классе. Далее, если Вы хотите грузить в одном классе, а присваивать значение текстовым полям в другом, то тут только один вариант, передать в этот класс значение.
Класс MyClass создавайте там же где и грузите текст, инициализируйте переменную textMyClass не в конструкторе, а на уровне класса и затем передавайте в него по комплиту текст. Код AS3:
Код AS3:
|
чет не работает.говорит "обращение к возможно неопределенному методу..."Это он про setText (везде заменил на qq)
|
Цитата:
|
| Часовой пояс GMT +4, время: 23:03. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.