|
|
|||||
Return в функциях
У меня есть 2 класса. Main и Test.
Вот код класса Main (сокращен): package{ import flash.display.MovieClip; import flash.text.*; public class Main extends MovieClip{ private var id = 123; private var myCabin:MyCabin=new MyCabin(id); public function Main():void{ gold_txt.text=String(myCabin.getInfo); } } } package{ import flash.display.MovieClip; import flash.net.*; import flash.display.*; import flash.events.*; import flash.text.*; public class MyCabin extends MovieClip{ public function MyCabin(id):void{ _info(id); } public function _info(viewer_id):void{ var loader:URLLoader = new URLLoader(); var request:URLRequest = new URLRequest("http://max-user.ru/app/getInfo.php"); request.method=URLRequestMethod.POST; var vars:URLVariables=new URLVariables(); vars['id'] = id; request.data = vars; loader.addEventListener(Event.COMPLETE,getInfo); loader.load(request); } public function getInfo(e:Event):int{ var loader2:URLLoader=URLLoader(e.target); var variables:URLVariables = new URLVariables(loader2.data); var gold:int=variables.gold; return gold; } } } Как решить эту проблему, чтобы при добавлении этой переменной в текст, выводилось 1000. Последний раз редактировалось Lyso; 23.04.2011 в 17:47. |
|
|||||
Вообще бы компилятор должен ругаться уже на это:
Функции слушатели в AS не возвращают значений. Это первая ошибка. Вторая - вы запрашиваете значение до того как загрузка будет завершена. Ведь вы его запрашиваете сразу, при инициализации. А загрузка, даже, не успела начаться. |
|
|||||
А как сделать, чтобы функция слушателя возвратила значение или как можно это заменить?
Вторую ошибку понял, спасибо. |
|
|||||
Banned
[+1 05.11.11]
[+1 09.08.11] Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
|
Цитата:
Можно, скажем написать так: И вызывать эту функцию не по событию. Другое дело, что смысла в этом нет. Цитата:
Можно в теле функции обработчика события вызывать другую функцию, которая уже будет возвращать событие |
|
|||||
Поправил ваш код "на коленке". Пишу на смартбуке, здесь даже редактора нет. Попробуйте
package{ import flash.display.MovieClip; import flash.events.*; //ещё поправил import flash.text.*; public class Main extends MovieClip{ private var id = 123; private var myCabin:MyCabin=new MyCabin(id); public function Main():void{ myCabin.addEventListener(myCabin.END_LOAD, endLoadListener); } private function endLoadListener(e:Event):void { gold_txt.text=String(myCabin.GoldValue); } } } package{ import flash.display.MovieClip; import flash.net.*; import flash.display.*; import flash.events.*; import flash.text.*; public class MyCabin extends MovieClip{ public static const END_LOAD:String = "END_LOAD"; private var _gold:int; public function get GoldValue():int { return _gold; } public function MyCabin(id):void{ _info(id); } public function _info(viewer_id):void{ var loader:URLLoader = new URLLoader(); var request:URLRequest = new URLRequest("http://max-user.ru/app/getInfo.php"); request.method=URLRequestMethod.POST; var vars:URLVariables=new URLVariables(); vars['id'] = id; request.data = vars; loader.addEventListener(Event.COMPLETE,getInfo); loader.load(request); } public function getInfo(e:Event):int{ var loader2:URLLoader=URLLoader(e.target); var variables:URLVariables = new URLVariables(loader2.data); _gold = variables.gold; //эту строку тоже поправил, итак работало бы //но так неправильно dispatchEvent(new Event(END_LOAD)); } } } если всё норм. найдите десять отличий Добавлено через 16 минут Надо же. Не знал. Даже не пробовал никогда вернуть значение из слушателя Последний раз редактировалось fish_r; 23.04.2011 в 18:25. |
|
|||||
Banned
[+1 05.11.11]
[+1 09.08.11] Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
|
Цитата:
|
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Цитата:
__________________
Reality.getBounds(this); |
|
|||||
fish_r, ваш код мне не подходит. Поправил по-своему варианту, вот что вышло:
Main - package{ import flash.display.MovieClip; import flash.net.*; import flash.display.*; import flash.text.*; import flash.events.*; public class Main extends MovieClip{ private var id = 123; public function Main():void{ goToMyCabin(); } private function goToMyCabin():void{ var myCabin:MyCabin=new MyCabin(id); var gold=myCabin.getGold(); gold_txt.text=String(gold); } } } package{ import flash.display.MovieClip; import flash.net.*; import flash.display.*; import flash.events.*; import flash.text.*; public class MyCabin extends MovieClip{ private var gold=5; public function MyCabin(id):void{ _info(id); } public function _info(id):void{ var loader:URLLoader = new URLLoader(); var request:URLRequest = new URLRequest("http://max-user.ru/app/getInfo.php"); request.method=URLRequestMethod.POST; var vars:URLVariables=new URLVariables(); vars['viewer_id'] = viewer_id; request.data = vars; loader.addEventListener(Event.COMPLETE,getInfo); loader.load(request); } public function getInfo(e:Event):void{ var loader2:URLLoader=URLLoader(e.target); var variables:URLVariables = new URLVariables(loader2.data); gold=variables.gold; } public function getGold(){ return gold; } } } Как сделать чтобы в Main- Текст выводился только после того, как переменная обновилась или какими способами можно решить эту проблему? |
Часовой пояс GMT +4, время: 18:26. |
|
« Предыдущая тема | Следующая тема » |
Теги |
return , ошибка , переменная , сервер , функции |
Опции темы | |
Опции просмотра | |
|
|