![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
[+1 05.04.09]
Регистрация: Dec 2008
Сообщений: 13
|
Такая вот диллема возникла, перехожу с АС2 на АС3
ну не могу понять хоть убей и все 1. создаю новый документ Document class пишу main.root_class создаю соответствующую папку и директорию 2. рисую объекты которые мне нужны (создаю в папке main соответствующие классы) стоит задача загрузить картинки из XML с парсом XML проблем не возникло, но не могу сделать следующее. мне надо вставить в нарисованный в руте объект я дал имя ему cont_ т.е. не название класса а именно имя переменной cont_ и соответственно при парсинге XML мне нужно в нем создать экземпляр определенного объекта: package main { import flash.display.Sprite; import flash.display.MovieClip; import flash.xml.*; import flash.net.*; import flash.events.*; import flash.display.DisplayObjectContainer; import main.*; public class XML_doc extends Sprite { var xml_file:String; var xml_string:XML; var objects:Array = new Array(); var result:XMLDocument = new XMLDocument(); public function XML_doc (xml_file:String) { this.xml_file = xml_file; trace (this.xml_file); this.result.ignoreWhite = true; load_from_file(); // trace(this.xml_string); // result.parseXML(this.xml_string); // getImages(result.firstChild); } private function getImages (node:XMLNode) { var kids:Array = node.childNodes; var x_:int = 50.0; var y_:int = 2.0; for (var i:int = 0; i < kids.length; i++) { //trace (kids[i]); var contaner:contaner_dummy = new contaner_dummy(); contaner.preview_src = kids[i].attributes.preview_src; contaner.src = kids[i].attributes.src; contaner.link = kids[i].attributes.link; contaner.x = x_; trace(root_class); // здесь он мне показывает что [руткласс загружен] root_class.cont_.addChild(contaner); //здесь пишет 1120: Access of undefined property cont_ ! хоть убей! x_ += 147; } trace(this.objects);// это я уже пытался забить все объекты в массив и получить через свойство objects - результат тотже, не видно этого свойства хоть убей } private function load_from_file() { var loader:URLLoader = new URLLoader(); loader.dataFormat = "text"; loader.addEventListener(Event.COMPLETE, loaded); var request:URLRequest = new URLRequest(this.xml_file); try { loader.load(request); } catch (error:Error) { trace("Unable to load request document"); } } private function loaded(event:Event) { var str:String = event.target.data; this.result.parseXML(str); getImages(result.firstChild); //this.xml_string = new XML(event.target.data); //trace (this.xml_string); } } } Запарился уже ![]() Последний раз редактировалось mg_creative; 14.04.2009 в 15:45. |
|
|||||
|
Ну правильно все. Он не знает такого свойства, создайте класс, наследующийся от него и обьяви там это свойство. В классах АС2 кстати он так же бы сругался, скорее с АС1 переходишь. (я кстати тоже, сначала АС1, потом АС3, потом АС2
)Если лень - то вот (но лучше так не делай)
__________________
Тут мужик танцует и поёт про флэш |
|
|||||
|
[+1 05.04.09]
Регистрация: Dec 2008
Сообщений: 13
|
Ну у меня класс root_class имеется, я так понимаю, что явно задавать свойство не требуется, если соответствующий объект есть на тайм лайне... вернее даже я думаю: не вызовет ли это конфликта?
package main { import flash.display.*; import flash.events.*; import flash.net.*; import main.*; import flash.xml.*; dynamic public class root_class extends Sprite { // var cont_r:cont = new cont(); public function root_class () { trace (this.cont_r); trace("Hellow World!!"); this.contaner.background_.alpha = 0; var xml_doc:XML_doc = new XML_doc('gallery.xml'); } } } причем в строке trace(this.cont_r) - выводит [object cont] (я уже переименовал переменную cont_ в cont_r, чтобы не было вопросов) Добавлено через 11 минут вот попробовал из класса XML_doc вызвать root_class Получается, что его вообще не видно!? Нет вру root_class видно, но если сделать так: То нифига он это свойство не видит, если через точку, то вообще компилятор орет ![]() Вообще не могу понять, как к таймлайну обратиться... получается что в Document class пишу main.root_class - это значит что я присваиваю рут как экземпляр root_class... тогда как же мне к этому экземпляру обратиться и к его свойствам, тобиш экземплярам на тайм лайне? Я даже пробовал пойти от обратного.. т.е.: сделать в классе XML_doc свойство objects и записать туда массив объектов но из конструктора root_class свойства XML_doc.objects тоже не могу получить... пишет ошибку компиляции !? Я же ведь объявил классы как публичные и динамичные!? в чем проблема не пойму, уже всю голову сломал себе Последний раз редактировалось mg_creative; 14.04.2009 в 18:57. |
|
|||||
|
Цитата:
Я походу туплю, это вроде АС2 стайл, попробуй с getChildByName
__________________
Тут мужик танцует и поёт про флэш |
|
|||||
|
[+1 05.04.09]
Регистрация: Dec 2008
Сообщений: 13
|
Я и так уже пробовал!
1061:Call to a possibly undefined method getChildByName through a reference with static type Class %( Задал явно свойство cont_r Как и предполагал, он мне написал типа: Конфликт, такая переменная уже существует Голова уже кипит просто, ничего не понимаю, чего надо этой железяке! Такое ощущение, что он видит только то что root_class - это объект, а доступа к его свойствам просто нет! Последний раз редактировалось mg_creative; 14.04.2009 в 19:29. |
|
|||||
|
Воспользуйся кастингом, чтобы он увидел это свойство.
Про него можно прочитать в соседней ветке, AS3 Tips&Tricks. Откастуй в Sprite, например. UPD: я слабо глядел на твой код, щас вгляделся - у тебя root_class - это просто класс. Он существует? Да. О чем тебе трейс и говорит, вызывая статичный метод toString(). А экземпляр у тебя создан? Врятли. И ты пытаешься обратиться к статичному свойству, которое у тебя не определенно.
__________________
Тут мужик танцует и поёт про флэш Последний раз редактировалось Psycho Tiger; 14.04.2009 в 19:33. |
|
|||||
|
[+1 05.04.09]
Регистрация: Dec 2008
Сообщений: 13
|
а разве экземпляр не создается при компиляции мультика?... ведь фактически они уже существуют на таймлайне? или надо сделать еще и экземпляр root_class и добавить его на таймлайн, к которому я никак не могу достучаться.... какойто замкнутый круг тогда получается!
Добавлено через 2 минуты Он же мне в трейс "Хеллоу ворлд!!!" пишет... значит конструктор запускается, значит экземпляр root_class создается, или я чегото не догоняю? он и в трейс пишет [object root_class] - т.е. объект (экземпляр рут_класса) Последний раз редактировалось mg_creative; 14.04.2009 в 19:57. |
|
|||||
|
Запускается конструктор того, экземпляр чего не был создан? Кто то из нас сошел с ума - либо я, либо флеш.
Прикрепи исходник.
__________________
Тут мужик танцует и поёт про флэш |
|
|||||
|
[+1 05.04.09]
Регистрация: Dec 2008
Сообщений: 13
|
Заработало вот так
![]() Когда начал эксперементировать с кастингом, компилятор вроде заткнулся но начал в вывод ругаться, и выдавать DOM... я обратил внимание на DOM изучил его и вывел такой вот способ может не новый, но все равно имейте ввидупричем работает именно так не работает: Компилятор ругается, хотя возможно из-за того что я его явно в root_class не объявил как свойство, но если объявлять, компилятор опять же ругается на конфликт Последний раз редактировалось mg_creative; 15.04.2009 в 06:50. |
|
|||||
|
Регистрация: Apr 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 355
|
Когда создается мультик и запускается твой конструктор в dynamic классе, строчка
не будет работать по той простой причине что сам объект в мультике cont_r еще не инициализировался. Нужно отлавливать событие когда инициализация объекта завершена. Я ловил его через Event.ENTER_FRAME или Event.ADD_TO_STAGE(последнее работает для объектов в момент добавления их на сцену). Но пока мультик не доиграется до кадра на таймлайн где находится нужный объект, в данном случае твой cont_r, он будет недоступен в коде.
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ |
![]() |
![]() |
Часовой пояс GMT +4, время: 23:31. |
|
|
« Предыдущая тема | Следующая тема » |
|
|