![]() |
|
||||||||||
|
|||||
|
Регистрация: Nov 2006
Сообщений: 253
|
Всем привет, знаю, что тема не впервые здесь выкладывается. Пересмотрел все, пробовал, но у меня ничего не получаеться. Не знаю как передать значение из одного класса в другой.
Вот код: public class XMLLoader extends MovieClip {
public var maxx:Number;
public var maxi:Number;
public var thumbs:Array = new Array();
public var pics:Array = new Array();
public var descs:Array = new Array();
private var novel:XML;
private var urlLoader:URLLoader;
public function XMLLoader( ) {
var urlRequest:URLRequest = new URLRequest("data/xmlphoto.xml");
urlLoader = new URLLoader( );
urlLoader.addEventListener(Event.COMPLETE, completeListener);
urlLoader.load(urlRequest);
}
public function completeListener(e:Event):void {
var gallery:XML = new XML(e.target.data);
this.maxx = gallery.photo.length(); // эту переменную надо передать
var i:Number;
for (i=0; i < gallery.photo.length(); i++) {
this.thumbs.push(gallery.photo[i].tmb);
this.pics.push(gallery.photo[i].img);
this.descs.push(gallery.photo[i].desc);
trace(" Image: "+ pics[i]);
trace(" Thumb: "+ thumbs[i]);
trace(" Description: "+ descs[i]);
/*массивы тоже передать надо*/
}
}
}
Подскажите, что я не так делаю. Заранее спасибо
__________________
Living with the smile |
|
|||||
|
strange mood
|
Обращение к переменной происходит сразу после создания экземпляра класса, а она в это время ещё не определена, так как событие окончания загрузки происходит значительно позже.
Я бы здесь либо отправлял событие окончания загрузки из XMLLoader'a, либо из его собственного обработчика дёргал нужный объект и передавал ему переменную (которой может быть например объект с набором параметров)
__________________
тонкий тролль, осеянный благодатью |
|
|||||
|
Регистрация: Nov 2006
Сообщений: 253
|
я только начинаю AS3, можете привести простой пример.
__________________
Living with the smile |
|
|||||
|
Можно пойти двумя путями - push и poll. Выбирая poll мы шлем событие XMLLoader'ом что все готово, а кому нужно "опрашивает" XMLLoader на предмет интересующей информации.
XMLLoader public function completeListener(e:Event):void {
var gallery:XML = new XML(e.target.data);
this.maxx = gallery.photo.length(); // эту переменную надо передать
...
dispatchEvent(new Event(Event.COMPLETE));
}
public class Test extends MovieClip{
public var testInfo:int;
public function Test() {
var n:News = new News();
var xmlLoaded:XMLLoader = new XMLLoader();
xmlLoaded.addEventListener(Event.COMPLETE, onXMLComplete);
}
private function onXMLComplete (event:Event):void
{
var loader:XMLLoader = event.target as XMLLoader
trace("Maxi: " + loader.maxi);
// подобным образом читаем и наши массивы
}
}
Тогда код в XMLLoader может быть примерно таким: public function completeListener(e:Event):void {
...
var event:XMLLoaderEvent = new XMLLoaderEvent(Event.COMPLETE);
event.maxi = this.maxi;
// сюда же можно засунуть и массивы
dispatchEvent(event);
}
__________________
Челябинские флешеры настолько суровы, что пишут код во Flash IDE |
|
|||||
|
Регистрация: Nov 2006
Сообщений: 253
|
vooparker, выдает следущую ошибку :
1046: Type was not found or was not a compile-time constant: XMLLoaderEvent.
__________________
Living with the smile |
|
|||||
|
Цитата:
:Цитата:
__________________
Челябинские флешеры настолько суровы, что пишут код во Flash IDE |
|
|||||
|
Регистрация: Nov 2006
Сообщений: 253
|
опять что-то не так
TypeError: Error #1034: Type Coercion failed: cannot convert flash.events::Event@2e282e1 to main.XMLLoaderEvent. at flash.events::EventDispatcher/flash.events:EventDispatcher::dispatchEventFunction() at flash.events::EventDispatcher/dispatchEvent() at main::XMLLoader/completeListener() at flash.events::EventDispatcher/flash.events:EventDispatcher::dispatchEventFunction() at flash.events::EventDispatcher/dispatchEvent() at flash.net::URLLoader/flash.net:URLLoader: nComplete()
__________________
Living with the smile |
|
|||||
|
давай код
__________________
Челябинские флешеры настолько суровы, что пишут код во Flash IDE |
|
|||||
|
Регистрация: Nov 2006
Сообщений: 253
|
в данном коде использую первый принцып
тут переменная выдает NAN
__________________
Living with the smile |
|
|||||
|
у тебя в коде каша из двух предложенных вариантов, поэтому и не работает. Плюс немного путаницы вносит именование свойств (maxx, maxi), при этом не понятно что они означают. Переделал твой пример под второй вариант. Единственно что дописал к классу события переопределенный метод clone, который создает точную копию текущего объекта события, собственно в твоем примере работать будет и без него, но на будущее запомни что у всех собственных объектов событий этот метод должен присутствовать и возвращать точную копию.
а про события почитай, это одна из основ программирования на as3
__________________
Челябинские флешеры настолько суровы, что пишут код во Flash IDE |
![]() |
![]() |
Часовой пояс GMT +4, время: 04:55. |
|
|
« Предыдущая тема | Следующая тема » |
|
|