Flash 我可以使用swfloader将Flex3中的参数传递给swf文件中的变量吗?
我创建了一个Flash动画(CS5,ActionScript3)并将其转换为SWF。flash动画需要3个变量的值(在swf时间线中定义),然后才能在我的Flex应用程序中运行。我已经在Flex中使用swfloader嵌入了swf文件,但是我需要在动画开始之前将参数从Flex传递到Flash中。我该怎么做 按照我在下面设置flex代码的方式,变量没有被更新。每次它到达changeParams函数时,我都会得到一个异常,因为它找不到“Type”、“Num1”等 我的flash代码的一部分:Flash 我可以使用swfloader将Flex3中的参数传递给swf文件中的变量吗?,flash,variables,parameters,flex3,swfloader,Flash,Variables,Parameters,Flex3,Swfloader,我创建了一个Flash动画(CS5,ActionScript3)并将其转换为SWF。flash动画需要3个变量的值(在swf时间线中定义),然后才能在我的Flex应用程序中运行。我已经在Flex中使用swfloader嵌入了swf文件,但是我需要在动画开始之前将参数从Flex传递到Flash中。我该怎么做 按照我在下面设置flex代码的方式,变量没有被更新。每次它到达changeParams函数时,我都会得到一个异常,因为它找不到“Type”、“Num1”等 我的flash代码的一部分: //T
//These 3 variables need to be populated via Flex BEFORE the animation starts...
var Num2:int;
var Num1:int;
var Type:String;
var whichNumber:int;
var frameNumber:int;
function playMe():void {
switch (Type) {
case 'type1':
gotoAndPlay(16);
break;
case 'type2':
frameNumber = 27;
whichNumber = 1;
gotoAndPlay(frameNumber);
break;
case 'type3':
frameNumber = 29;
whichNumber = 1;
gotoAndPlay(17);
break;
case 'type4':
whichNumber = 1;
break;
}
}
我的flex代码:
公共函数changeParams():void{
idAnimation.content[“Type”]=“type1”;
idAnimation.content[“Num1”]=6;
idAnimation.content[“Num2”]=30;
跟踪(“Type=“+idAnimation.content[“Type”]);
跟踪(“Num1=“+idAnimation.content[“Num1”]);
跟踪(“Num2=“+idAnimation.content[“Num2”]);
}
]]>
如果idAnimation
是movieclip的实例名,而movieclip在开头嵌入了什么,那么在swf中创建函数也是一种很好的方法:
function setParamsAndAutoplay(value1:*, value2:*, vlaue3:*):void
{
Num2 = value1;
Num1 = value2;
Type = value3;
playMe();
}
这样可以确保设置参数并同时启动动画。
您还可以将stop()代码>位于swf中用于停止播放的每个代码前面
因此,您可以在playMe()
函数之前将其添加到代码中:
stop();
function setParamsAndAutoplay(value1:*, value2:*, vlaue3:*):void
{
Num2 = value1;
Num1 = value2;
Type = value3;
playMe();
}
这能解决问题吗
编辑
您还可以尝试将init=“changeParams()”
更改为complete=“changeParams();”
编辑2
或者尝试将swf加载到flex中。这不会嵌入它,如果您的意图是这样的话,但是您可以检查该函数是否工作正常。也许这可以解决问题
var ldr:Loader = new Loader();
ldr.contentLoaderInfo.addEventListener("complete", ldrDone);
ldr.load(new URLRequest("your-swf-file"));
function ldrDone(evt:*):void
{
var movie:MovieClip = MovieClip(evt.target.content);
movie.setParams(0, 1, 2);
}
好吧,我发现了问题所在。正如anemgyenge所建议的,我将函数改为以“complete”而不是“init”运行,但是changeParams()从未运行过,直到我停止尝试将swf嵌入swfloader。我想我没有在我的原始帖子中包括我的错误。如果您尝试嵌入@embed,它不会在您期望的时候运行“complete”事件
我做的另一件事是添加一个“gotoAndPlay(1)”,以便在设置参数后播放第一帧。正如anemgyenge所建议的,我在Flash代码的开头添加了stop(),这样在Flex告诉它之前它不会播放。每当Flex中的一个变量发生变化时,我都会使用绑定设置程序运行changeParams(),这样参数将在Flash SWF中更新,并在第1帧重新开始电影。很高兴终于找到了答案!:)
以下是我更新的Flex代码:
public function changeParams():void {
if (idAnimation.content != null) {
idAnimation.content["Type"] = myString;
idAnimation.content["Num1"] = myNum1;
idAnimation.content["Num2"] = myNum2;
MovieClip(idAnimation.content).gotoAndPlay(1);
trace ("Type= " + idAnimation.content["Type"]);
trace ("Num1= " + idAnimation.content["Num1"]);
trace ("Num2= " + idAnimation.content["Num2"]);
}
}
]]>
</mx:Script>
<mx:SWFLoader id="idAnimation" source="assets/animation.swf" complete="changeParams()" />
公共函数changeParams():void{
if(idAnimation.content!=null){
idAnimation.content[“Type”]=myString;
idAnimation.content[“Num1”]=myNum1;
idAnimation.content[“Num2”]=myNum2;
MovieClip(i动画化。内容)。gotoAndPlay(1);
跟踪(“Type=“+idAnimation.content[“Type”]);
跟踪(“Num1=“+idAnimation.content[“Num1”]);
跟踪(“Num2=“+idAnimation.content[“Num2”]);
}
}
]]>
是的,这可能会解决在播放动画之前更新变量的问题。谢谢你的回复。我仍然不知道如何解决实际将数据从Flex发送到Flash的问题,不过…我编辑了文本并给出了一些提示。希望它能解决这个问题。我仍然无法从Flex中获取要更新的值。假设这是我在changeParams()中设置它的方式;?如何从Flex访问swf中的函数并传入这些值?
public function changeParams():void {
if (idAnimation.content != null) {
idAnimation.content["Type"] = myString;
idAnimation.content["Num1"] = myNum1;
idAnimation.content["Num2"] = myNum2;
MovieClip(idAnimation.content).gotoAndPlay(1);
trace ("Type= " + idAnimation.content["Type"]);
trace ("Num1= " + idAnimation.content["Num1"]);
trace ("Num2= " + idAnimation.content["Num2"]);
}
}
]]>
</mx:Script>
<mx:SWFLoader id="idAnimation" source="assets/animation.swf" complete="changeParams()" />