需要非常大的数据结构。寻找想法

时间:2011-03-31 01:51:16

标签: flash actionscript-3 data-structures

我一直在咀嚼这一段时间,我想我会提出一个问题并尝试对此有所了解。也许会引发一个灯泡。

我需要构建一个十六进制网格,并且十六进制网格将至少为10 x 10,最大为500x500 - 并且可能更大。这显然是高端的一个巨大的网格,自然必须被打破。

这是问题的主要部分。

  • 500x500六边形网格。约
  • 他们不经常改变,但他们可以改变。
  • 将它分解为50x50或100x100部分是非常可行的,但是有人可能会从地图的一端跑到另一端,所以我需要能够在某个时刻处理整个事情,即使它是分段。
  • 这显然会造成很大的内存消耗。

我可以将数据(共享变量)存储为简单的byteArray,甚至可以存储在plainText中。每个十六进制的信息非常简单,它只是有多少。我没有“保存”数据。 (将是一个特色)

每个六边形的基本结构是:

  • 十六进制颜色(显然有轮廓) (或位图图片)blitting 任何人!
  • TextField,其中包含数字。 (最多2 位)

这几乎是所有需要的信息。

如果没有十六进制发生变化的可能性,这将是相当微不足道的。

所以我很好奇是否有人对此有任何想法。 (任何绝对真理都不会坏;)

编辑:哦,关于hexes的信息来自tcp流。这不是一个问题,就像我说的那样,每个十六进制数据都是简单的,我的解析器闪电般快,所以不是问题。

更新:必须创建和维护250,000个对象(格式)的可能性才是我最常问的问题。这就是为什么我在寻找创意。 (闪存中的250k物体很好)

2 个答案:

答案 0 :(得分:4)

  

每个六边形的基本结构是:

* hex color (with outline obviously) (or a bitmap picture) blitting anyone!
* TextField with a number in it. (max 2 digits)

我认为您不需要存储所有250K TextFields和位图,因为它们只需要存在于屏幕上。将此数据打包为少量字节 - 最多2位数为7位,从调色板添加颜色ID(如果需要truecolor,则添加24位)和位图ID。如果您制作相同大小的结构,可以将它们写入ByteArray。这将使您摆脱250K对象引用并防止可能的内存碎片 然后,您只需要为这些字节创建打包/解包函数到一些可用的对象(不要忘记对象池),并执行arythmetics以从ByteArray右侧获取它们。正如其他人所指出的,如果将单元格数据打包成int对,则250K单元格并不多。

答案 1 :(得分:2)

也许您可以将此作为重复数据删除的练习?例如,可以与您的六边形关联的文本值不超过100个。假设您只使用少量不同的十六进制颜色(例如,小于20),那么一组相对较小的十六进制实例可以表示每个可能的十六进制配置。所以你可能有一个实用程序函数(不是有效的ActionScript语法,抱歉):

Hex getHex(int color, String label)

...检查是否已存在具有给定配置的十六进制,并且只创建一个新的Hex实例(如果尚不存在)。

所以你的数组中仍然有250,000个引用(或者你用来跟踪你的hexes的任何结构),但只有少量的实际对象实例。看起来应该是可管理的,即使在Flash中也是如此。

如果你的咒语在创建后是可变的,你当然必须非常小心。