![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Apr 2010
Сообщений: 8
|
Есть класс, в котором происходит подгрузка данных из XML и распарсевание данных по переменным класса. Как дождаться распарсивания этих переменных из главного класса программы? Чтобы присвоить переменной главного класса значение переменной класса, в котором прроисходят действия загрузки.
|
|
|||||
|
Регистрация: Feb 2007
Сообщений: 563
|
используйте кастомное событие с помощью dispathEvent, для отсылки наверх нужного события, при получении которого, будут происходить дальнейшие действия.
|
|
|||||
|
Регистрация: Apr 2010
Сообщений: 8
|
Спасибо! пробую так, но не получается.
Главный класс: package { import flash.display.Sprite; import flash.events.Event; import flash.text.TextField; public class Burgame extends Sprite { private var player:Player = new Player(); public function Burgame() { player.addEventListener(Player.PLAYERLOADED,onPlayerLoaded); player.Load(); } private function onPlayerLoaded(event:Event):void { trace (player.player_name); } } } package { import flash.events.Event; import flash.events.EventDispatcher; import flash.net.URLLoader; import flash.net.URLLoaderDataFormat; import flash.net.URLRequest; public class Player extends EventDispatcher { private var playerName:String; public static var PLAYERLOADED:String = "playerLoaded"; public function Player() { // Загрузка данных об игроке var player:URLLoader = new URLLoader(); player.dataFormat = URLLoaderDataFormat.TEXT; player.addEventListener(Event.COMPLETE, PlayerLoaded); player.load(new URLRequest("http://localhost:8888/burgame/game.php?command=getPlayerInf")); } private function PlayerLoaded (event:Event):void { try { var player_xml:XML = new XML(event.target.data); ParsePlayerData(player_xml); } catch (e:TypeError) { trace("Не получилось преобразовать данные об игроке в формат XML"); trace(e.message); } } private function ParsePlayerData(PlayerData:XML):void { var player_name:String = PlayerData.record.player_name.text(); playerName = player_name; } public function Load():void { dispatchEvent(new Event(Player.PLAYERLOADED)); } public function get player_name():String { return playerName; } } } |
|
|||||
|
Регистрация: Feb 2010
Адрес: Донецк
Сообщений: 34
|
Пардон, вы уже поняли.
У вас же playerName переменная называется, player_name локальная. Последний раз редактировалось oleg_tomenko; 05.04.2010 в 12:53. |
|
|||||
|
Регистрация: Apr 2010
Сообщений: 8
|
Не понял я Вашего комментария
. player_name - есть локальная переменная в функции ParsePlayerData. Эта переменная дальше функции не видна. А есть метод, возвращающий имя игрока: public function get player_name():String. |
|
|||||
|
...
модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
|
Nitr0geN, вам же уже в прошлой теме объяснили, по-моему. Событие загрузки не происходит моментально, его нужно дожидаться. На то у вас и есть обработчик PlayerLoaded (название которого принято писать с маленькой буквы). И событие об окончании загрузки нужно рассылать в этом обработчике, что у вас и делалось в прошлой теме. Вам только местами две строчки поменять нужно было, т.к. вы событие рассылали до разбора данных, т.е. до вызова метода parsePlayerData, а значение переменной playerName у вас задается именно в этом методе.
А здесь вы уже нахимичили непонятно чего. |
|
|||||
|
Регистрация: Apr 2010
Сообщений: 8
|
udaaff спасибо большое! Просто я ничего тогда не понял! Сейчас все стало ясно после Вашего ответа и все заработало!
Огромное всем спасибо! И сори за то, что тупил так ) Просто мне пока сложно разобраться с логикой ))) |
![]() |
![]() |
Часовой пояс GMT +4, время: 14:11. |
|
|
« Предыдущая тема | Следующая тема » |
|
|