我在as3中有两个swf(a.swf anb b.swf)。现在我想要传递变量从a.swf到b.Swf.i,请点击此链接Tutorial 我使用了Loader Class.Here my Coding。
var loader:Loader = new Loader();
loader.load("a.swf?test=hi");
但是我收到了错误消息
TypeError:错误#1034:类型强制失败:无法将“textchat.swf?test = hi”转换为flash.net.URLRequest。 在BasicTickerSprite_fla :: MainTimeline / frame1()
我如何解决这个问题?如何将字符串从一个Swf传递给另一个Swf? 任何人请详细解释我 Thaks in Advance
答案 0 :(得分:4)
答案 1 :(得分:1)
ExternalInterface是一个很好的方法。
也许更好的是LocalConnection类:
http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/net/LocalConnection.html
在Stack Overflow中提供的答案可能是一个理解基本概念的良好开端:
How to pass a String from a SWF into another SWF
Plastic Sturgeon回答:
让我们澄清一下:1。加载器swf,我们将调用父进程。 2。 由父母加载的swf我们会给孩子打电话。
Child包含一个字符串,您希望父级能够 读取该字符串>所以......孩子必须为。定义一个公共变量 字符串。 (这意味着你必须为它使用一个Class文件 不能在时间表上公开财产。)
最后,家长会尝试获取该属性。你可能想要 将它包装在try / catch中以处理字符串不会出现的情况 本。
以下是Child Class的示例。
package { import flash.display.Sprite; /** * ... * @author Zach Foley */ public class Child extends Sprite { public var value:String = "This is the child Value"; public function Child() { trace("Child Loaded"); } } }
这是父装入程序类:
package { import flash.display.Loader; import flash.display.Sprite; import flash.events.Event; import flash.net.URLRequest; /** * ... * @author Zach Foley */ public class Parent extends Sprite { private var loader:Loader; public function Parent() { trace("PArent Init"); loader = new Loader(); loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoaded); loader.load(new URLRequest("child.swf")); } private function onLoaded(e:Event):void { trace("Child Loaded"); trace(loader.content['value']); } } }
输出将是:PArent Init子载入子载入这是 子价值
答案 2 :(得分:1)
var loader:Loader = new Loader();
loader.load(new URLRequest("http//localhost/a.swf?test=hi"));
你需要一台本地服务器 的更新强>:
private var _ldr:Loader;
private var _mc:MovieClip;
public function Main():void {
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(e:Event = null):void {
removeEventListener(Event.ADDED_TO_STAGE, init);
// entry point
_ldr = new Loader();
_ldr.contentLoaderInfo.addEventListener(Event.INIT, onInit);
_ldr.load(new URLRequest('a.swf'));
}
private function onInit(e:Event):void{
_mc = _ldr.content as MovieClip;
_mc['test'] = 'hi';
addChild(_mc);
}
答案 3 :(得分:0)
答案 4 :(得分:0)
我知道这是一个老话题,但我最近不得不在多个swfs之间引用一个smartfox服务器实例和变量。我想我会分享我如何实现这一目标的基础知识。
ParentSWF
public var MyVar:String = "Hello";
public var sfs:SmartFox = new SmartFox(true);
private var ChildMC:MovieClip = new MovieClip();
private var myLoader:Loader;
private function LoadChildSWF(evt:Event):void //i used button click event to load swf
{
myLoader = new Loader(); // create a new instance of the Loader class
var url:URLRequest = new URLRequest("YOURSWF.swf"); // in this case both SWFs are in the same folder
try
{
myLoader.load(url);
myLoader.contentLoaderInfo.addEventListener(Event.COMPLETE,FFLoaded);
}
catch (error:Error)
{
trace("Unable to load requested document.");
}
}
function FFLoaded(e:Event):void
{
ChildMC= myLoader.content as MovieClip;
addChild(ChildMC);
ChildMC.init(this);
}
public function RemoveChildMC():void
{
removeChild(ChildMC);
ChildMC=null;
}
ChildSWF
package
{
import com.smartfoxserver.v2.SmartFox;
public class ChildDocumentClass extends MovieClip
{
private var refDocument:*;
private var ChildVar:String;
private var sfs:SmartFox;
public function ChildDocumentClass()
{
trace("Initilise ChildDocumentClass");
// Nothing to do
}
public function init(refDoc:*):void
{
// Get the references to the Document Class
refDocument = refDoc;
// Get the references to the Server Instance
sfs=refDocument.sfs;
//Pass Parent Variable to child variable
ChildVar=refDocument.MyVar;
}
//call to parent class function example to remove loaded swf
private function UnloadThisSWF():void
{
refDocument.RemoveChildMC();
}
}
}
正如您所见,通过init(refDoc:*)函数将父类传递给子类可以实现通信。