2014-12-11 44 views
0

我一直在研究这个问题几个小时,虽然我发现有点类似的情况下,我还没有找到一个简单的修复。基本上我有一个时间表,一些动画播放。最终我进入我的主游戏画面(256帧),在那里停止();被调用,然后用户点击3个门中的一个。点击任何一个门,用户都会前往一堆框架,然后他们可以玩游戏。一旦游戏完成或用户点击回来,它将用户带回到原始框架(第256帧),并且每次它执行此操作时,它都会说我的“upDoor”是空引用,然后是upDoor按钮(实例upStairsDoor按钮)不再在舞台上。Flash CS3 null参考按钮/ mc后返回到帧

无论用户首先选择哪个门,这似乎都会发生。如果用户选择upDoor并在那里播放minigame或选择outsideDoor并播放该特定的minigame,那么当用户返回到此帧(第256帧)时,它会在门上抛出此错误,当然因为它会抛出错误,在这一点上没有其他工作,我必须退出游戏。

这不是一个错字!请不要建议我检查我的实例名称。正如我所提到的,第一次到达框架时,门会很好地工作,这只是当你回到它的时候。我读过它可能与垃圾收集器有关,但当我们返回到框架时,它不应该重新创建我已经放置到舞台上的所有实例吗?它不会在我拖到舞台上的任何其他按钮或动画剪辑上出错,只有这一个特定的门。

我忘了提及它在引用upDoor按钮的一行代码上出错。我这里有几行代码...(帧256)

if (downDoor.enabled) { 
    downDoor.enabled = false; 
} 
if (upDoor.enabled) { 
    upDoor.enabled = false; 
} 
if (outDoor.enabled) { 
    outDoor.enabled = false; 
} 

什么这些都为禁用门,直到用户点击,然后运行该将所有的门开启功能在屏幕上的另一个对象。有问题的错误是说我无法访问空引用的属性。

+1

恕我直言,最好的修正是螺丝时间线AS IS,因为当你做一个'gotoAndStop()'或其他的框架改变时,旧的框架是**被破坏**并且所有的链接都是无效的,所以当你回到那个框架,没有'downDoor'了,也没有其他的对象可以访问你之前的那个框架。 – Vesper 2014-12-11 09:23:19

+1

如果您无法删除时间线,请使用父级MC的属性,例如'if(downDoorEnabled){downDoorEnabled = false; if(downDoor)downDoor.enabled = false; }'。请确保您事先计划它们,因为这些属性不包含在一个框架中,并且覆盖这些属性可能会损坏您的SWF逻辑。但要注意的是,它们的语法在编译时没有被检查,所以如果你在读取属性时在某个地方犯了一个错误,结果将是“未定义的”(或者如果该属性尚未设置),并且写入到错误的财产将导致正确的财产价值不变。 – Vesper 2014-12-11 09:27:42

+0

@ Richard-Chase这些代码行在哪里?他们内部有什么事件处理程序? – 2014-12-11 14:29:45

回答

0

感谢您输入的人。最终成为我的解决方案是在框架加载时以编程方式实现所有的动画片段和按钮,然后在切换帧时删除它们。这样,每次从gotoAndPlay重新加载框架时,都会重新创建。