全局变量问题

时间:2009-06-06 15:32:13

标签: flash actionscript-3 actionscript variables global

我加载图像并将其添加到MC someMC。如果“something”为true,someVariable将获得someMC scaleX数字。让我们说它的0.82。

我需要的是将这个数字放入Slider对象的s.value中。因为我希望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
I've uploaded all the code to Pastebin. Take a look ;)

3 个答案:

答案 0 :(得分:1)

问题是你的处理程序函数没有关于Slider所在位置的任何信息。你在那里的s变量也不是真正的全局变量,它在你的类或movieclip中是本地的。当处理程序由movieclip之外的代码执行时,除非您使用类中的方法,否则没有this上下文。

我能想到这样做的最好方法是使用Class。创建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
            }
        }
    }
}

答案 1 :(得分:1)

您的completeHandler中的this不是文档。尝试一些MC.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;

答案 2 :(得分:0)

不小心我又看到了你的问题。 (记得我吗?)

您可以扩展Loader,而不是从另一个域扩展图像,因此不存在任何跨域安全问题

这里的工作样本: http://matrixoft.infunity.com/agent/calvin/stackoverflow/getScale.swf

这里的源代码: http://matrixoft.infunity.com/agent/calvin/stackoverflow/getScale.rar

[P.S。看到buttonAction层内的注释代码,注释代码失败,因为它试图操纵来自另一个域的图像的比例。评论代码后的代码操纵Loader的比例,而不是图像]