Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Глобальные переменные (http://www.flasher.ru/forum/showthread.php?t=199572)

zipimp 20.05.2013 23:48

Глобальные переменные
 
Здравствуйте. Я новичок в AS 3. Хотелось бы разобраться как глобально объявить переменную и впоследствие её использовать.

Вычитал здесь http://stackoverflow.com/questions/9...n-actionscript как это можно сделать.

Скачал простейший баннер отсюда http://www.web-article.com.ua/2009/a...anner-ssylkoj/

Создал в папке с fla файлом файл Globe.as следующего содержания

Код AS3:

package
{
    public var MyGlobal:String = "bla";
}

В самом баннере

Код AS3:

mybanlink.addEventListener(MouseEvent.CLICK, mybanlinkClickListener);
 
function mybanlinkClickListener(e:MouseEvent):void {
        trace(MyGlobal);
        var url:String="http://www.web-article.com.ua";
        var urlRequest:URLRequest=new URLRequest(url);
        navigateToURL(urlRequest);
}

На что мне пишут: "Scene 1, слой "actions", кадр 1, строка 7 1120: Обращение несуществующего свойства MyGlobal." Хотя IntelliSence видит эту глобальную переменную и подсказывает когда я её начинаю набирать.

Подскажите, что я делаю не так. Рабочая среда Flash Proffesional CS6

Котяра 21.05.2013 00:24

Не надо вам глобальные переменные пока. Особенно.

caseyryan 21.05.2013 07:33

Цитата:

Создал в папке с fla файлом файл Globe.as следующего содержания
файл должен называться не Globe.as в данном случае, а MyGlobal.as (о чем кстати там на стековерфлоу и написано, внимательнее надо читать)

А вообще, плюсую к посту котяры. Не надо делать глобальных переменных.

AlexCooper 21.05.2013 12:39

Можно сделать так
Код AS3:

package inpictures.data {
 
        import inpictures.view.GUI;
        import service.AMF3;
 
        public class GlobalVars extends Object {
 
                public function GlobalVars() {
                }
 
                {
                        lang = new Language();
 
                        account = new Account();
 
                        core = new Core();
 
                        gui = new GUI();
 
                        lib = new Library();
 
                        times = new Times();
 
                        cache = new Cache();
 
                        methods = new APIMethods();
 
                        handler = new AMF();
                }
 
                public static var lang:Language;
 
                public static var handler:AMF;
 
                public static var account:Account;
 
                public static var amf:AMF3;
 
                public static var gui:GUI;
 
                public static var core:Core;
 
                public static var lib:Library;
 
                public static var methods:APIMethods;
 
                public static var times:Times;
 
                public static var cache:Cache;
 
        }
 
}

Код AS3:

package inpictures.data {
 
        public class Times extends Object {
 
                public function Times() {
 
                }
 
                public var server:Number = 0;
 
                public var client:Number = 0;
 
                public var sync:Number = 0;
 
                public function get now():Number {
                        return Math.round(new Date().getTime()/1000)+sync;
                }
 
        }
 
}


caseyryan 21.05.2013 14:31

AlexCooper, в чем прикол ставить статический инициализатор, если можно сразу инициализировать переменные? Выпендреж?
Только лишнюю путаницу создает.

GBee 21.05.2013 18:59

Цитата:

Сообщение от caseyryan (Сообщение 1134168)
AlexCooper, в чем прикол ставить статический инициализатор, если можно сразу инициализировать переменные? Выпендреж?
Только лишнюю путаницу создает.

Возможно следует соблюдать порядок создания. Кто знает, там может Language использует данные, которые подгружаются откуда-то и т.п.

caseyryan 21.05.2013 19:08

Цитата:

Кто знает, там может Language использует данные, которые подгружаются откуда-то и т.п.
Это что-то меняет?
Хотя да.. могу представить себе такую ситуацию. Тогда тем более лучше этого не делать )) к еще большей путанице приведет.

GBee 21.05.2013 19:49

Цитата:

Тогда тем более лучше этого не делать ))
Это уже другой вопрос :о)

AlexCooper 21.05.2013 21:42

Вы имеете ввиду этот блок?
Код AS3:

{
                        lang = new Language();
 
                        account = new Account();
 
                        core = new Core();
 
                        gui = new GUI();
 
                        lib = new Library();
 
                        times = new Times();
 
                        cache = new Cache();
 
                        methods = new APIMethods();
 
                        handler = new AMF();
                }

в действительности никакой путаници не произойдет. Класс Core управляет всем.
Код AS3:

public class Core {
 
                public var ADD_BLACKLIST:String = 'add_blacklist';
                public var COMPLAINT_USER:String = 'complaint_user';
                public var COMPLAINT_USER_SEND:String = 'complaint_user_send';
                public var CLOSE:String = 'close';
                public var SEND_GIFT:String = 'send_gift';
                public var INIT_REG:String = 'init_reg';
 
                .....................
 
                public function Core() {
                        ...........
                }
 
                public function logic($cmd:String='', $data:Object=null):void {
                        trace('CMD: '+$cmd);
                        if ($data) {
                                trace('logic');
                                for ( var i in $data) {
                                        trace(i+" >> "+$data[i]);
                                }
                        }
 
                        switch ($cmd) {
 
                                .....................
 
                                case ADD_BLACKLIST: {
                                        GlobalVars.amf.toamf(GlobalVars.methods.addBlacklist, GlobalVars.handler.blacklistHandler, GlobalVars.account.amfSing($data));
                                } break;
 
                                case COMPLAINT_USER: {
                                        GlobalVars.gui.attachToCentr(new Complaint($data),true);
                                } break;
 
                                case COMPLAINT_USER_SEND: {
                                        $data.cmd = 'send';
                                        GlobalVars.amf.toamf(GlobalVars.methods.sendToSupport, GlobalVars.handler.supportHandler, GlobalVars.account.amfSing($data));
                                } break;
 
                                .....
                        }
 
                        if ($data && $data.remove) GlobalVars.gui.remove($data.remove);
                }
 
        }

соответственно в любом месте мне достаточно вызвать
Код AS3:

GlobalVars.core.logic(GlobalVars.core.COMPLAINT_USER, {'uid':$uid,'remove':this} );

и откроется окно с жалобой на пользователя. Не пойму в чем моя ошибка по Вашему мнению

zipimp 21.05.2013 22:31

Цитата:

Сообщение от caseyryan (Сообщение 1134128)
файл должен называться не Globe.as в данном случае, а MyGlobal.as (о чем кстати там на стековерфлоу и написано, внимательнее надо читать)

А вообще, плюсую к посту котяры. Не надо делать глобальных переменных.

Как я понял файл называть можно как угодно, пакет то анонимный.
Я знаю что это некрасиво плохо и прочее, но вопрос у меня стоит именно в этом, чтобы иметь глобальную переменную, которая была бы видна и из обработчиков, везде вобщем. Через анонимный пакет так же можно сделать, чтобы даже нигде не нужно было импортов делать.


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

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