Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flash 我可以使用swfloader将Flex3中的参数传递给swf文件中的变量吗?_Flash_Variables_Parameters_Flex3_Swfloader - Fatal编程技术网

Flash 我可以使用swfloader将Flex3中的参数传递给swf文件中的变量吗?

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

我创建了一个Flash动画(CS5,ActionScript3)并将其转换为SWF。flash动画需要3个变量的值(在swf时间线中定义),然后才能在我的Flex应用程序中运行。我已经在Flex中使用swfloader嵌入了swf文件,但是我需要在动画开始之前将参数从Flex传递到Flash中。我该怎么做

按照我在下面设置flex代码的方式,变量没有被更新。每次它到达changeParams函数时,我都会得到一个异常,因为它找不到“Type”、“Num1”等

我的flash代码的一部分:

//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()" />