现在我明白这已经被要求从父母传给孩子了,这一切都很好,但我想知道的是,我如何从儿童SWF转回父母?
我为Parent to Child做的方式是:
在你的父母swf中,你要放
_global.myvariable = blah;
在你的孩子swf中,你会把
this. myvariable = _global. myvariable;
但是当我尝试将它从Child传递给Parent时,我似乎无法获得相同的效果。
提前感谢您的任何帮助/建议。
答案 0 :(得分:4)
如果您打算使用AS3,我会建议您使用事件在父母与子女之间建立适当的沟通。
对于要拦截的每个事件(用户操作或其他事件),您必须注册所谓的事件侦听器功能。语法如下:
addEventListener(Type_of_event.Name_of_event, Name_of_function_YOU_define);
处理事件的函数如下:
function event_handler(event:Event) {
/* Do something with this event */
}
如果您想了解更多有关活动的信息,可以查看this page。
AS3中的事件问题是,默认情况下,您无法将额外的参数传递给事件处理程序。但至少有两种方法可以做到:
您创建了own custom event type。这将是最干净的方式,如果您正在开发一个相对较大的Flash项目,也许是最推荐的方法。
如果您只使用Flash IDE,在没有文档类的情况下工作,并且想要编写程序代码或想要尽可能地坚持IDE和时间线,则应该使用动态实例变量。
我想对于你的情况,适当的解决方案将是第二个。
动态实例变量只能与使用动态属性声明的类相关联。一旦将类定义为动态类,我们就可以通过标准变量赋值语句向该类的任何实例添加一个新的动态实例。
var myInstance:DynamicClass= new DynamicClass();
myInstance.foo = "hello World"; // this won't cause any compile time errors
trace(myInstance.foo ); //returns hello World
在AS3中,与以前的版本不同,只有MovieClip类被定义为动态:(
也许你最期待的那部分^ _ ^
例如:
在子SWF中
/*
child.swf
You have 3 movie clips on stage
*/
// Add dynamic instance variables to all 3 clips
mc_1.num = 1;
mc_2.num = 2;
mc_3.num = 3;
在父SWF中
/*
parent.swf
*/
//Load the child.swf
var movieRequest:URLRequest = new URLRequest("child.swf");
var movieLoader:Loader = new Loader();
movieLoader.load(movieRequest);
addChild(movieLoader);
movieLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, movieComplete);
//Once loaded in attach listeners here
function movieComplete(event:Event):void {
mc_1.addEventListener(MouseEvent.CLICK,onClickListener);
mc_2.addEventListener(MouseEvent.CLICK,onClickListener);
mc_3.addEventListener(MouseEvent.CLICK,onClickListener);
}
function onClickListener(e:MouseEvent):void{
// Retreive the num : dynamically set variable
trace(e.currentTarget.num);
}
答案 1 :(得分:0)
查找LocalConnection类。这可能有所帮助。