【问题标题】:Array won't refresh itself after removeChildremoveChild 后数组不会自行刷新
【发布时间】:2013-08-23 17:37:19
【问题描述】:

有一个对象数组。我正在尝试removeChild 来自该数组的对象,如下所示。 removeChild 工作正常,但在删除最上层的对象后数组不会自行刷新。正如您在下面看到的,我尝试将 trace 排列出来。

首先,数组包含三个元素,显然myArray.length 必须是 3。 删除一个孩子后,myArray.length 必须为 2,但它得到 3(错误)。

removeChild(myArray[currShape]);
trace(myArray);

请告诉我这里缺少什么。

【问题讨论】:

  • 这是高级的东西,但我还是要说。即使您使用splice 从数组中删除元素,对象仍然是“活动的”。这是因为实际上 AS3 中的所有对象都只是指向存储在内存中的真实对象的指针。 AS3 中的变量只是对您从未实际交互过的真实对象的引用。这就是为什么即使你从数组中移除对象,它仍然会在显示列表中呈现。

标签: arrays actionscript-3


【解决方案1】:

假设您使用的是 ActionScript,removeChild() 仅用于将对象移出舞台。它不会从数组中取出东西。您必须在另一个语句中手动将对象从数组中取出。

【讨论】:

  • 谢谢,请告诉我如何用另一个语句取出对象?
  • 第一个参数是开始拼接的索引,第二个是要拼接的项目数
  • 澄清一下,数组是对象本身的容器。 removeChild 是将displayObjects 从显示列表中移除,这是一种从渲染机制中移除对象的说法。如果这对您来说不是很清楚,您应该阅读显示列表。
【解决方案2】:

你可以试试这样的:

removeChild(myArray.splice(currShape,1));

这将从数组中删除条目并返回将用于将其从舞台中删除的条目。

【讨论】:

  • 这实际上是行不通的,因为 splice 返回一个包含拼接对象的 Array,而不是 DisplayObject。您需要添加一个流行音乐才能使其正常工作。即removeChild(myArray.splice(currShape,1).pop());
猜你喜欢
  • 2020-06-09
  • 2022-07-06
  • 1970-01-01
  • 1970-01-01
  • 2023-04-05
  • 2018-10-19
  • 2017-05-30
  • 1970-01-01
  • 2016-02-18
相关资源
最近更新 更多