Форум 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=119819)

EvilCoder 01.01.2009 19:55

Получение разных значений при обращении к одной переменной
 
Вложений: 1
Поздравляю всех с наступившим Новым Годом!

Начал знакомиться с ActionScipt3 совсем недавно,поэтому заранее извиняюсь за, возможно, глупый вопрос.
Имеется класс VarDefinition в папке com, в котором определяется переменная ExampleVar числом 999, и сеттер setVar.

Код AS3:

package com{
 
        public class VarDefinition {
 
                public var ExampleVar:Number = 999;
 
                public function VarDefinition()
                {
 
                }
                public function setVar(value):void
                {
                        ExampleVar = value;
                }
 
        }
 
}

Мувиклип blacksquare, в котором переменной ExampleVar через сеттер setVar присваивается значение 33 и потом в каждом кадре выводится ее значение в output

Код AS3:

package com
{
        import flash.display.MovieClip
        import flash.events.Event
 
        public class blacksquare extends MovieClip
        {
                var _clVarDef = new VarDefinition();
 
                public function blacksquare()
                {
                addEventListener(Event.ENTER_FRAME, onEnterFrame)
                _clVarDef.setVar(33);
                }
 
                public function onEnterFrame(event:Event)
                {
                        trace("EnterFrame " + _clVarDef.ExampleVar);
                }
        }
}


и мувиклип greensquare, по нажатии на который опять же выводится в output значение ExampleVar.

Код AS3:

package com
{
        import flash.display.MovieClip;
        import flash.events.MouseEvent;
        import com.blacksquare;
 
        public class greensquare extends MovieClip
        {
                var _clVarDef = new VarDefinition();
                public function greensquare()
                {
                        addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
                }
 
                private function onMouseDown(Event:MouseEvent)
                {
                        trace(_clVarDef.ExampleVar);
                }
 
        }
}

Почему при событии onEnterFrame выводится 33, а при клике на grensquare - 999? В чем может быть проблема? И как мне можно организовать хранилище множества глобальных переменных, к которым можно будет обращаться в любое время из разных классов? Заранее спасибо!

DarkLight 01.01.2009 20:51

Так все же логично. Вы создали в 2 классах 2 совершенно не связанных друг с другом экземпляра другого класса, изменили значение в одном. Понятно, что в другом ничего не изменится. Для хранения глобальных (относительно всех экземпляров заданного класса) переменных используется ключевое слово static и обращение вида "ИмяКласса.имяПеременной"

P. S. В ActionScript принято называть классы с большой буквы, а переменные с маленькой

insected 02.01.2009 17:09

Ну если хотите нечто глобальное, доступное отовсюду, то пишите синглтон.


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

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