Flash AS3 - 对象未设置为null

时间:2009-05-12 21:13:04

标签: flash actionscript-3

我有我在Flash中构建的菜单系统,允许您选择项目并向上或向下移动。如果从菜单中删除对象,我希望将所选项目设置为null,因此不会再尝试移动。

我有一个全局(对于当前的影片剪辑时间轴)变量:

var selectedPlaylistItem:MovieClip;

存储选择的菜单项(菜单项只是影片剪辑),如果删除该项,我将所选项设置为空:

function removeFromPlaylist(sender:playlist_content_item) {
    if(sender == selectedPlaylistItem) {
        //Not sure why this isn't working, but at some point I need to figure it out.
        selectedPlaylistItem = null;
        trace(selectedPlaylistItem);

该跟踪将显示null而没有任何问题,但在我的下一个向上移动项目的函数中,在我将其设置为null之后,它仍然设置为删除它之前的对象:

function playlistUp(sender:MovieClip) {
    trace(selectedPlaylistItem);

该跟踪将显示原始对象。

有谁知道为什么那不起作用?为什么它不会在设置之后保持为空?

由于


更新:

所以我试着看看能不知道发生了什么:

    this.selectedPlaylistItem = null;
    trace(selectedPlaylistItem);
    setTimeout(function() {trace(selectedPlaylistItem);}, 4000);

但是当跟踪在4秒后发生时,它表示它仍然是所选对象,即使后面的跟踪显示为null,并且我在代码中到处查找,但是没有任何地方可以重置。 / p>

5 个答案:

答案 0 :(得分:1)

从我所看到的它应该保持为null。你可以发布一些其他代码,即在这两个函数被调用的上下文中吗?

答案 1 :(得分:1)

此代码在哪里“直播”?如果它在时间轴上,则可以再次调用设置selectedPlaylistItem的代码,在任何情况下,我都会在您设置selectedPlaylistItem的位置粘贴一些跟踪或断点,以查看它是否被意外调用。

答案 2 :(得分:0)

您的代码是否恰好超过两帧或更多?我的猜测是它再次运行代码。所以在脚本的进程中,它将被设置为null,而当前帧还没有呈现,但如果它循环回到(比如说)第1帧,那么可能会调用一些代码来再次设置该变量,因此你会在4秒后看到它被设置为。

答案 3 :(得分:0)

如果在运行selectedPlaylistItem时屏幕上显示removeFromPlaylist(),请尝试从显示列表中删除该对象,然后将其归零。

答案 4 :(得分:-2)

是否已从对象中删除所有事件侦听器和/或您使用Weak References?:

  

弱引用是垃圾收集器不计算的引用(即,它不计入引用计数,并且不遵循标记清除)。这意味着如果对象剩余的唯一引用很弱,则可以在下次GC扫描时进行收集。

     

开发人员经常会忘记与事件侦听器关联的引用,这通常会导致侦听器永远不会从内存中删除。这就是为什么弱引用的事件监听器在AS3中非常方便的原因 - 如果您忘记删除监听器,则不会妨碍垃圾收集器收集对象的能力。

// params: eventName, listener, capturePhase, priority, useWeakReference
someObj.addEventListener("eventName",myFunct,false,0,true);