处理数组。我在类基础上创建对象,将它们推入数组中,我有两个按钮:一个添加一个子元素并将其推入数组中,第二个移位数组并移除该子元素。在我的鼠标上还有一个函数,如果我点击一个对象,我定义它的数组号,删除子和.嗯,不确定是否成功,但“删除Arrayi;”,我是目标的数组号码。每当我做某事时,我都能在文本字段中看到Array.length。第二个按钮实际上从Array中删除了一个对象,其数量减少了。但是从数组中删除指定的对象以及Array.slice(i,1)并不会减少数组的长度。所以我担心它可能会导致溢出。只是数组,不确定,也许在数组中有超过一百万个细胞是可以的,就像我做一个流星雨游戏,流星被从屏幕上移除,但是阵列仍然有它们的细胞。如果它们以每秒30-50的速度出现,很明显,在运行它的20分钟内,我可能会出现内存问题。嗯,是60k,所以也许,我不应该担心,因为只有图形需要很多内存?
不过,我仍然需要一个关于如何在Array中间移动对象的建议。被选中的人。如何删除它,就好像它从未被创建过一样,就像Shift一样?(是的,对吗?)
发布于 2013-02-20 06:06:48
Array.splice()将完成大部分技巧。当您将流星移出屏幕时,您可以将其从数组中拼接出来,如下所示:
var i:int=meteorArray.indexOf(meteorToRemove);
if (i>=0) meteorArray.splice(i,1);发布于 2013-02-20 06:11:39
如果要删除其他对象,则不应将创建新对象作为一种良好做法。试着回收,或者更好地说“对象池”
您应该计算出您可以立即使用的元素的最大数量。对每个属性创建一个“活动”属性,并将其设置为true或false,而不是创建/删除。然后,您可以对每个对象运行更新,并且只有在必要时才更新它。
例如:
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();希望这能有所帮助。
此外,还可以添加一个辅助方法以获得可用的流星:
function getMeteorAvailable():Meteor
{
for each (var meteor in meteors )
if ( !meteor.active )
return meteor;
}https://stackoverflow.com/questions/14973211
复制相似问题