我正在使用以下代码在Flash游戏中显示广告。除了一个小问题外,它的效果很好。如果在显示广告之前调用startButton函数,则会收到错误消息:
ArgumentError:错误#2025:提供的DisplayObject必须是调用者的子级。 在flash.display :: DisplayObjectContainer / removeChild() 在VirusDefender / clickStart()[VirusDefender :: frame1:17]
广告在舞台上时没有错误。我尝试在try catch中包装removeChild,但是没有用。
如果广告尚未显示,有人可以告诉我如何阻止调用removeChild行。有时广告最多只需3秒钟,因此人们可能会在进入舞台之前点击。
stop();
//Start Button
startScreen.startButton.addEventListener(MouseEvent.CLICK,clickStart);
function clickStart(event:MouseEvent)
{
sndFire=new fire_sound();
sndFireChannel=sndFire.play();
removeChild(l);
gotoAndStop("play");
}
// Help Button
startScreen.helpButton.addEventListener(MouseEvent.CLICK,clickHelp);
function clickHelp(event:MouseEvent)
{
sndFire=new fire_sound();
sndFireChannel=sndFire.play();
removeChild(l);
gotoAndStop("help");
}
// SMAATO Advertising Code for Start Page
var request:URLRequest = new URLRequest("http://soma.smaato.com/oapi/reqAd.jsp");
var variables:URLVariables = new URLVariables();
variables.adspace = "0";
variables.pub = "0";
variables.devip = "127.0.0.1";
variables.format = "IMG";
variables.adcount = "1";
variables.response = "XML";
request.data = variables;
var loader:URLLoader = new URLLoader();
var l:Loader = new Loader();
loader.addEventListener(Event.COMPLETE, onComplete);
loader.load(request);
function onComplete(e:Event):void
{
var data:XML = new XML(loader.data as String);
var status:String = data.*::status.toString();
if(status == "success")
{
var ad:XMLList = data.*::ads.*::ad;
var link:String = ad.*::link.toString();
l.load(new URLRequest(link));
addChild(l);
l.x = 135;
l.y = 265;
var clickurl:String = ad.*::action.@target.toString();
l.addEventListener(MouseEvent.CLICK, onAdClick);
}
function onAdClick(e:MouseEvent):void
{
var request:URLRequest = new URLRequest(clickurl);
navigateToURL(request);
}
}
谢谢!富
答案 0 :(得分:3)
将该行包装成:
if (l != null && contains(l)) {
removeChild(l);
}
这将检查l
是否为空并且是否为子项,然后才将其删除。
答案 1 :(得分:0)
或者,由于Loader是一个DisplayObject,你可以简单地将它添加到舞台之前(它可以在你将它添加到舞台之前完成加载)并在按下start时将其删除,这样你就不会如果你确实希望它在印刷机上消失,那么它会在以后挥之不去或弹出。