Проблема глобальной переменной - PullRequest
1 голос
/ 06 июня 2009

Я загружаю изображение и добавляю его в MC someMC. Если «что-то» истинно, someVariable получает число someMC scaleX. Скажем, его 0,82.

Мне нужно получить это число в s.value в моем объекте Slider. Так как я хочу, чтобы значение Slider было там, где мой масштаб изображения.

Это, конечно, не работает из-за ограничений области видимости.

Я попытался установить переменную в верхней части кода следующим образом: var someVariable: Number; но это тоже не сработало.

Вот код:

function completeHandler(event:Event):void{
     if (something) {
          var someVariable:Number = this.someMC.scaleX;
     }
}   


var s:Slider = new Slider();
s.maximum = 500;
s.minimum = 10;
s.value = someVariable;

Есть мысли?


Обновление
Я ищу решение, не используя пакет и класс, так как я еще не так устойчив с AS3.

Обновление 2
Я загрузил весь код в Pastebin. Посмотри;)

Ответы [ 3 ]

1 голос
/ 07 октября 2009

this в вашем completeHandler не является документом. Попробуйте просто someMC.scaleX, и, предполагая, что вы объявили его на основной временной шкале или где-то еще, он должен иметь к нему доступ. Свойство scaleX также варьируется только от 0 до 1, поэтому, если ваш Slider имеет значение 10: 500 - это не сработает. Я положил * 100 для вас, но делаю все, что требуется, чтобы установить шкалу в соответствии с тем, что вы намеревались.

Кроме того, вам нужно явно установить значение Slider в обработчике, а не просто изменять var. Переменные не передаются таким образом в AS3.

function completeHandler(event:Event):void{
         if (something) {
                  var someVariable:Number = someMC.scaleX;
                  s.value = someVariable * 100;
         }
}   


var s:Slider = new Slider();
s.maximum = 500;
s.minimum = 10;
1 голос
/ 06 июня 2009

Проблема в том, что ваша функция-обработчик не имеет никакой информации о том, где находится ваш Slider. Переменная s, которая у вас есть, тоже не является глобальной, она локальна в вашем классе или мувиклипе. Когда обработчик выполняется кодом вне вашего мувиклипа, контекст this отсутствует, если вы не используете метод из класса.

Лучший способ сделать это - использовать класс. Создайте s как переменную-член класса, тогда ваш обработчик сможет ссылаться на него, используя this. Что-то вроде кода ниже должно сделать это. Не забудьте также связать его с библиотечным мувиклипом.

package {
    import flash.display.MovieClip;

    class MyMovieClip extends MovieClip {
        public var s:Slider;

        public function MyMovieClip {
            var s:Slider = new Slider();
            s.maximum = 500;
            s.minimum = 10;

        }

        function completeHandler(event:Event):void{
            if (something) {
                var someVariable:Number = this.someMC.scaleX;
                this.s.value = someVariable
            }
        }
    }
}
0 голосов
/ 06 июня 2009

Ну случайно я вижу твой вопрос снова. (помнишь меня?)

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

рабочий образец здесь: http://matrixoft.infunity.com/agent/calvin/stackoverflow/getScale.swf

исходный код здесь: http://matrixoft.infunity.com/agent/calvin/stackoverflow/getScale.rar

[p.s. Посмотрите закомментированный код внутри слоя buttonAction, закомментированный код не работает, потому что он пытается манипулировать масштабом изображения из другого домена. Код после закомментированного кода управляет масштабом загрузчика, а не изображением]

...