Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   непонятные действия event:MouseEvent (http://www.flasher.ru/forum/showthread.php?t=185640)

razerw 17.10.2012 16:05

непонятные действия event:MouseEvent
 
Доброго времени суток.

Не могу понять, что происходит. Имею два класса А и В, из класса А запускаю обработчик событий MouseEvent.MOUSE_WHEEL который запускает функцию wheely в классе В.

Так вот ситуация такая в классе В имеется функция в которой переменная tx=1; в самом конструкторе класса В переменной tx присваивается значение 0.

Я трейсю переменную tx из функции wheely после события MOUSE_WHEEL и она равняется 0, хотя как я предполагаю она должна быть ровна 1. Но если я запущу эту функцию в класс В например вот так вот wheely (); то tx=1.
Почему когда функция запускается после события MOUSE_WHEEL переменная tx=0;, а если из родного класса то tx=1; ?

AlexLucas 17.10.2012 16:19

Код в студию, хотя бы минимальный примерчик.

razerw 18.10.2012 12:11

первый класс
Код AS3:

package Framework.cache
{
 
 
        public class Cache extends Sprite
        {
 
 
                //вот тут в конструкторе я вызываю функцию ON
                public function Cache()
                {
                        var anim:Anim = new Anim();
                        anim.on();
 
                }
 
}

второй класс
Код AS3:

package Framework.cache
{
 
 
        public class Anim extends Object
        {
 
                protected static var _instanc:Anim;
 
                var tx = 0;
 
                public function Anim()
                {
                  var tx = 1;
 
                }
 
                function on()
                {
                  trace(tx)// результат 0
                }
          }
}

но если я функцию on запущу из под конструктора класса Anim . вот пример
Код AS3:

package Framework.cache
{
 
 
        public class Anim extends Object
        {
 
                protected static var _instanc:Anim;
 
                var tx = 0;
 
                public function Anim()
                {
                  var tx = 1;
                  on()       
                }
 
                function on()
                {
                  trace(tx)// результат 1
                }
          }
}

То переменная tx покажет результат 1.
Почему когда я запускаю функцию on из класса Сache переменная trace(tx);//результат 0 ?

PainKiller 18.10.2012 12:19

по идее такого не может быть, лично я бы прошелся пошагово в дебаггере по коду, если выложите исходник, так и сделаю

caseyryan 18.10.2012 12:22

во-первых функция on не имеет области видимости, в этом случае по умолчанию используется internal, что дает доступ к ней только из того же пакета, во-вторых Object не может ни посылать, ни принимать события, так как не является наследником EventDispatcher. Собственно, Object это вообще базовый класс. Не нужно писать extends Object так как это вообще смысла не имеет.
Ну и в-третьих, я тут вообще не вижу где события мыши прослушиваются. Мышь может работать только на объектах, которые являются наследниками InteractiveObject

AlexLucas 18.10.2012 12:31

И я не знаю, может вы не специально это делаете, но в конструкторе Anim вы создаёте новую локальную переменную tx и приравниваете её 1, а не переписываете аттрибут tx.

caseyryan 18.10.2012 12:33

Цитата:

И я не знаю, может вы не специально это делаете, но в конструкторе Anim вы создаёте новую локальную переменную tx и приравниваете её 1, а не переписываете аттрибут tx.
Точно подмечено. Я как-то упустил этот момент )

PainKiller 18.10.2012 19:07

точно, тоже не заметил (


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

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