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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 14.04.2009, 15:43
mg_creative вне форума Посмотреть профиль Отправить личное сообщение для mg_creative Найти все сообщения от mg_creative
  № 1  
Ответить с цитированием
mg_creative
[+1 05.04.09]

Регистрация: Dec 2008
Сообщений: 13
По умолчанию не получается вызвать/записать свойство в объект класса

Такая вот диллема возникла, перехожу с АС2 на АС3
ну не могу понять хоть убей и все
1. создаю новый документ Document class пишу main.root_class
создаю соответствующую папку и директорию
2. рисую объекты которые мне нужны (создаю в папке main соответствующие классы)

стоит задача загрузить картинки из XML
с парсом XML проблем не возникло, но не могу сделать следующее.
мне надо вставить в нарисованный в руте объект я дал имя ему cont_ т.е. не название класса а именно имя переменной cont_
и соответственно при парсинге XML мне нужно в нем создать экземпляр определенного объекта:
Код AS3:
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.
Старый 14.04.2009, 17:56
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 2  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,599
Записей в блоге: 17
Ну правильно все. Он не знает такого свойства, создайте класс, наследующийся от него и обьяви там это свойство. В классах АС2 кстати он так же бы сругался, скорее с АС1 переходишь. (я кстати тоже, сначала АС1, потом АС3, потом АС2 )

Если лень - то вот (но лучше так не делай)
Код AS3:
root_class["cont_"].addChild(contaner);

Старый 14.04.2009, 18:19
mg_creative вне форума Посмотреть профиль Отправить личное сообщение для mg_creative Найти все сообщения от mg_creative
  № 3  
Ответить с цитированием
mg_creative
[+1 05.04.09]

Регистрация: Dec 2008
Сообщений: 13
Ну у меня класс root_class имеется, я так понимаю, что явно задавать свойство не требуется, если соответствующий объект есть на тайм лайне... вернее даже я думаю: не вызовет ли это конфликта?

Код AS3:
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');
		}
	}	
}
Добавлено через 1 минуту
причем в строке trace(this.cont_r) - выводит [object cont] (я уже переименовал переменную cont_ в cont_r, чтобы не было вопросов)

Добавлено через 11 минут
вот попробовал из класса XML_doc вызвать root_class
Код AS3:
trace (root_class);// - [object root_class]
Получается, что его вообще не видно!?
Нет вру root_class видно, но если сделать так:
Код AS3:
trace (root_class["cont_r"]); //пишет undefined
То нифига он это свойство не видит, если через точку, то вообще компилятор орет

Вообще не могу понять, как к таймлайну обратиться... получается что в Document class пишу main.root_class - это значит что я присваиваю рут как экземпляр root_class... тогда как же мне к этому экземпляру обратиться и к его свойствам, тобиш экземплярам на тайм лайне?

Я даже пробовал пойти от обратного.. т.е.: сделать в классе XML_doc свойство objects и записать туда массив объектов
но из конструктора root_class свойства XML_doc.objects тоже не могу получить... пишет ошибку компиляции !?

Я же ведь объявил классы как публичные и динамичные!? в чем проблема не пойму, уже всю голову сломал себе


Последний раз редактировалось mg_creative; 14.04.2009 в 18:57.
Старый 14.04.2009, 19:05
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 4  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,599
Записей в блоге: 17
Цитата:
Ну у меня класс root_class имеется, я так понимаю, что явно задавать свойство не требуется
Не-а, требуется.

Я походу туплю, это вроде АС2 стайл, попробуй с getChildByName

Старый 14.04.2009, 19:25
mg_creative вне форума Посмотреть профиль Отправить личное сообщение для mg_creative Найти все сообщения от mg_creative
  № 5  
Ответить с цитированием
mg_creative
[+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.
Старый 14.04.2009, 19:31
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 6  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,599
Записей в блоге: 17
Воспользуйся кастингом, чтобы он увидел это свойство.
Про него можно прочитать в соседней ветке, AS3 Tips&Tricks.
Откастуй в Sprite, например.
Код AS3:
(your_class as Sprite).getChildByName
UPD: я слабо глядел на твой код, щас вгляделся - у тебя root_class - это просто класс. Он существует? Да. О чем тебе трейс и говорит, вызывая статичный метод toString(). А экземпляр у тебя создан? Врятли. И ты пытаешься обратиться к статичному свойству, которое у тебя не определенно.


Последний раз редактировалось Psycho Tiger; 14.04.2009 в 19:33.
Старый 14.04.2009, 19:48
mg_creative вне форума Посмотреть профиль Отправить личное сообщение для mg_creative Найти все сообщения от mg_creative
  № 7  
Ответить с цитированием
mg_creative
[+1 05.04.09]

Регистрация: Dec 2008
Сообщений: 13
а разве экземпляр не создается при компиляции мультика?... ведь фактически они уже существуют на таймлайне? или надо сделать еще и экземпляр root_class и добавить его на таймлайн, к которому я никак не могу достучаться.... какойто замкнутый круг тогда получается!

Добавлено через 2 минуты
Он же мне в трейс "Хеллоу ворлд!!!" пишет... значит конструктор запускается, значит экземпляр root_class создается, или я чегото не догоняю?

он и в трейс пишет [object root_class] - т.е. объект (экземпляр рут_класса)


Последний раз редактировалось mg_creative; 14.04.2009 в 19:57.
Старый 14.04.2009, 23:05
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 8  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,599
Записей в блоге: 17
Запускается конструктор того, экземпляр чего не был создан? Кто то из нас сошел с ума - либо я, либо флеш.
Прикрепи исходник.

Старый 15.04.2009, 06:41
mg_creative вне форума Посмотреть профиль Отправить личное сообщение для mg_creative Найти все сообщения от mg_creative
  № 9  
Ответить с цитированием
mg_creative
[+1 05.04.09]

Регистрация: Dec 2008
Сообщений: 13
Заработало вот так
Код AS3:
parent["cont_r"].addChild(contaner);


Когда начал эксперементировать с кастингом, компилятор вроде заткнулся но начал в вывод ругаться, и выдавать DOM... я обратил внимание на DOM изучил его и вывел такой вот способ может не новый, но все равно имейте ввиду
причем работает именно так
Код AS3:
parent.cont_r.addChild(contaner);
не работает: Компилятор ругается, хотя возможно из-за того что я его явно в root_class не объявил как свойство, но если объявлять, компилятор опять же ругается на конфликт


Последний раз редактировалось mg_creative; 15.04.2009 в 06:50.
Старый 16.04.2009, 08:36
SunShadow вне форума Посмотреть профиль Отправить личное сообщение для SunShadow Найти все сообщения от SunShadow
  № 10  
Ответить с цитированием
SunShadow
 
Аватар для SunShadow

Регистрация: Apr 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 355
Когда создается мультик и запускается твой конструктор в dynamic классе, строчка
Код AS3:
trace (this.cont_r);
не будет работать по той простой причине что сам объект в мультике cont_r еще не инициализировался. Нужно отлавливать событие когда инициализация объекта завершена. Я ловил его через Event.ENTER_FRAME или Event.ADD_TO_STAGE(последнее работает для объектов в момент добавления их на сцену). Но пока мультик не доиграется до кадра на таймлайн где находится нужный объект, в данном случае твой cont_r, он будет недоступен в коде.
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ

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

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

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


 


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


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