好吧,在我的游戏主菜单中,我有一个发光效果,这样当你将鼠标悬停在隐形按钮上时,脚本将使整个菜单发光,淡入淡出。已对菜单上的每个按钮重复此代码(来自事件侦听器),并对按钮实例名称和函数名称进行适当更改。唯一的问题是,当我点击'startdesu'它带我到下一个场景,我开始得到重复的错误," TypeError:错误#1009:无法访问空对象引用的属性或方法。 在bjvb_fla :: MainTimeline / increaseGlow()"。我已经尝试在点击按钮时删除发光事件监听器,但一切都没有运气。请帮忙! ; 0;
这是简洁的基本代码,但如果有帮助,我可以发布整个事情。 (另外,当我从游戏回到到开始菜单时,我得到了相同的Null错误。
import flash.filters.*;
import flash.events.Event;
stop();
wow.alpha=0.5;
var menuGlow:GlowFilter = new GlowFilter();
menuGlow.color = 0xffffff;
menuGlow.blurX = 20;
menuGlow.blurY = 20;
menuGlow.alpha = 0;
menu.filters = [menuGlow];
var glow:Boolean = false;
startdesu.addEventListener(MouseEvent.MOUSE_OVER, addGlow);
startdesu.addEventListener(MouseEvent.MOUSE_OUT, removeGlow);
startdesu.addEventListener(Event.ENTER_FRAME, increaseGlow);
function addGlow(e:MouseEvent):void
{
glow = true;
}
function removeGlow(e:MouseEvent):void
{
glow = false;
}
function increaseGlow(e:Event):void
{
if(glow == true)
{
menuGlow.alpha = menuGlow.alpha + 0.02;
}
else if(glow == false)
{
menuGlow.alpha = menuGlow.alpha - 0.02;
}
menu.filters = [menuGlow];
}
答案 0 :(得分:0)
这是可能导致错误的行:
menu.filters = [menuGlow];
实例名称'菜单'可能没有对象。在你的第二个场景中。您可以通过添加检查对象是否存在来修复错误,如下所示:
function increaseGlow(e:Event):void
{
//if there's no menu object, return
if(!menu) return;
if(glow == true) {
menuGlow.alpha = menuGlow.alpha + 0.02;
} else {
menuGlow.alpha = menuGlow.alpha - 0.02;
}
menu.filters = [menuGlow];
}
但正确的解决方案是删除事件侦听器。不确定为什么它不适合你,但你应该能够在切换场景之前在click事件处理程序中添加它。
startdesu.removeEventListener(Event.ENTER_FRAME, increaseGlow);
尝试删除事件侦听器时会出现什么错误?