Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 当movieclip变为null时,如何使包含movieclip的数组自动更新?_Actionscript 3 - Fatal编程技术网

Actionscript 3 当movieclip变为null时,如何使包含movieclip的数组自动更新?

Actionscript 3 当movieclip变为null时,如何使包含movieclip的数组自动更新?,actionscript-3,Actionscript 3,我正在尝试下面的代码,因此每当我将movieclip设为null时,包含它的引用的数组也会变为null 我知道下面的代码无法做到这一点,但我想知道,如果movieclip为null,数组可以提供信息。有什么好办法吗?有什么建议吗 import flash.display.MovieClip; import flash.events.Event; var a_arr:Array = new Array(a_Mc,b_Mc); trace(a_arr); a_Mc= null ; trac

我正在尝试下面的代码,因此每当我将movieclip设为null时,包含它的引用的数组也会变为null

我知道下面的代码无法做到这一点,但我想知道,如果movieclip为null,数组可以提供信息。有什么好办法吗?有什么建议吗

import flash.display.MovieClip;
import flash.events.Event;

var a_arr:Array = new Array(a_Mc,b_Mc); 

trace(a_arr); 

a_Mc= null ;
trace(a_arr);

//output is:
//[object MovieClip],[object MovieClip]

//  ==>>>> but i want something like null,[object MovieClip ]

这样不可能,因为变量
a_MC
只是指向对象的指针。但是,您可以这样做:

var a_arr:Array = [a_Mc, b_Mc];  // use [] instead of new Array()

a_arr[0] = null;

trace(a_arr);
这会将数组指针值更改为null

也可以对MovieClip对象使用自定义属性,因为它们是动态类(与精灵不同)


这样不可能,因为变量
a_MC
只是指向对象的指针。但是,您可以这样做:

var a_arr:Array = [a_Mc, b_Mc];  // use [] instead of new Array()

a_arr[0] = null;

trace(a_arr);
这会将数组指针值更改为null

也可以对MovieClip对象使用自定义属性,因为它们是动态类(与精灵不同)


我对AS3的了解已经很生疏了,但是由于这个问题的本质对于任何编程实践来说都是非常普遍的,所以我仍然会尝试以独立于语言的方式来回答。如果AS3提供特定的机制来实现您想要的目标,我的解决方案可能不是最好的,但您必须听取其他人的意见

从泛型编程的角度来看,基本问题是指向同一对象的多个引用彼此不了解。将其中一个引用赋值为null只会重定向这一变量的指向,它不会将更改通知其他引用,并且通常不会改变对象本身的状态,因此其他引用仍然指向该对象。您希望null的赋值在语义上表示“释放此对象并使对它的所有引用无效”,但由于垃圾收集机制,这种情况不会发生

处理这种情况的正确方法是以正确的方式使用引用——如果希望对象消失,请将对它的所有引用设置为null。然而,这取决于你想在你的情况下做什么(我感觉你在尝试做一些稍微不正统的事情),这可能是不可能的。您可以将该数组用作主列表和指向该对象的指针存在的唯一位置,并始终通过在其他位置索引到该数组来引用该对象


如果你必须按照你说的去做,我能想到的最简单的解决方案是让对象本身携带一个标志(它是否被标记为释放),作为所有引用之间的通信方式。每当将引用设置为null时,将标志设置为true。在取消引用任何引用之前检查标志。我不知道MovieClip中是否有类似用途的内置属性,但AS3是动态的,您可以自己添加属性。在其他语言中,您可以在其周围创建一个包装器来承载该标志。但是请注意:这会扭曲一个基本的编程概念(引用指向一个对象,但对象之间不会相互交谈),如果你不小心,你可能会在这里或那里得到惊喜。

我对AS3的了解相当生疏,但由于这个问题的性质对于任何编程实践来说都相当普遍,我仍然会尝试以独立于语言的方式回答。如果AS3提供特定的机制来实现您想要的目标,我的解决方案可能不是最好的,但您必须听取其他人的意见

从泛型编程的角度来看,基本问题是指向同一对象的多个引用彼此不了解。将其中一个引用赋值为null只会重定向这一变量的指向,它不会将更改通知其他引用,并且通常不会改变对象本身的状态,因此其他引用仍然指向该对象。您希望null的赋值在语义上表示“释放此对象并使对它的所有引用无效”,但由于垃圾收集机制,这种情况不会发生

处理这种情况的正确方法是以正确的方式使用引用——如果希望对象消失,请将对它的所有引用设置为null。然而,这取决于你想在你的情况下做什么(我感觉你在尝试做一些稍微不正统的事情),这可能是不可能的。您可以将该数组用作主列表和指向该对象的指针存在的唯一位置,并始终通过在其他位置索引到该数组来引用该对象


如果你必须按照你说的去做,我能想到的最简单的解决方案是让对象本身携带一个标志(它是否被标记为释放),作为所有引用之间的通信方式。每当将引用设置为null时,将标志设置为true。在取消引用任何引用之前检查标志。我不知道MovieClip中是否有类似用途的内置属性,但AS3是动态的,您可以自己添加属性。在其他语言中,您可以在其周围创建一个包装器来承载该标志。但是,请注意:这会使一个基本的编程概念(指向对象的引用彼此不通信)发生弯曲,如果您不小心,您可能会在这里或那里得到惊喜。

您必须获取集合中项目的索引并将其设置为null,或者如果您只想将其从集合中删除,请使用splice。以下是我可以想到的两个选项:

        a_arr.splice(a_arr.indexOf(a_Mc),1);
        //or
        a_arr[a_arr.indexOf(a_Mc)] = null;

您必须获取集合中项目的索引,并将其设置为null,或者如果您只想将其从集合中删除,请使用splice。以下是我可以想到的两个选项:

        a_arr.splice(a_arr.indexOf(a_Mc),1);
        //or
        a_arr[a_arr.indexOf(a_Mc)] = null;

你到底为什么想要这种行为?可能有更好的方法来解决这个问题……此外,访问空对象是不好的。如果一个μMc为null,很可能会给您一个null指针异常。那么是的:你想要实现什么?@cherrun引用a_Mc在当时为空,bu