我加载图像并将其添加到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还不是那么稳定。
答案 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的比例,而不是图像]