首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AS3堆栈溢出?

AS3堆栈溢出?
EN

Stack Overflow用户
提问于 2013-02-20 05:56:53
回答 2查看 128关注 0票数 0

处理数组。我在类基础上创建对象,将它们推入数组中,我有两个按钮:一个添加一个子元素并将其推入数组中,第二个移位数组并移除该子元素。在我的鼠标上还有一个函数,如果我点击一个对象,我定义它的数组号,删除子和.嗯,不确定是否成功,但“删除Arrayi;”,我是目标的数组号码。每当我做某事时,我都能在文本字段中看到Array.length。第二个按钮实际上从Array中删除了一个对象,其数量减少了。但是从数组中删除指定的对象以及Array.slice(i,1)并不会减少数组的长度。所以我担心它可能会导致溢出。只是数组,不确定,也许在数组中有超过一百万个细胞是可以的,就像我做一个流星雨游戏,流星被从屏幕上移除,但是阵列仍然有它们的细胞。如果它们以每秒30-50的速度出现,很明显,在运行它的20分钟内,我可能会出现内存问题。嗯,是60k,所以也许,我不应该担心,因为只有图形需要很多内存?

不过,我仍然需要一个关于如何在Array中间移动对象的建议。被选中的人。如何删除它,就好像它从未被创建过一样,就像Shift一样?(是的,对吗?)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-20 06:06:48

Array.splice()将完成大部分技巧。当您将流星移出屏幕时,您可以将其从数组中拼接出来,如下所示:

代码语言:javascript
复制
var i:int=meteorArray.indexOf(meteorToRemove);
if (i>=0) meteorArray.splice(i,1);
票数 1
EN

Stack Overflow用户

发布于 2013-02-20 06:11:39

如果要删除其他对象,则不应将创建新对象作为一种良好做法。试着回收,或者更好地说“对象池”

您应该计算出您可以立即使用的元素的最大数量。对每个属性创建一个“活动”属性,并将其设置为true或false,而不是创建/删除。然后,您可以对每个对象运行更新,并且只有在必要时才更新它。

例如:

代码语言:javascript
复制
var meteors:Array = [];

// create 500 meteors
for ( var i:int = 0; i < 500; i++ ) {
  var meteor:Meteor = new Meteor();
  meteor.active = false;
  meteors.push(meteor);
}

// enable one meteor
meteors[0].active = true;

// in your update method:
for each (var meteor in meteors ) 
  if ( meteor.active )
    meteor.update();

希望这能有所帮助。

此外,还可以添加一个辅助方法以获得可用的流星:

代码语言:javascript
复制
function getMeteorAvailable():Meteor
{
  for each (var meteor in meteors ) 
      if ( !meteor.active )
        return meteor;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14973211

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档