Най-ефективният начин за съхраняване и извличане на данни от карта в AS3?

ето нещо, трябва да съхранявам различни стойности в 2d масив (или нещо концептуално подобно). Идеята е да се създаде 2d карта с плочки и масивът да запази идентификатора на всяка плочка в картата. Опитвам се да създам нещо сравнително ефективно, особено защото трябва да спестя малко използване на паметта за по-късна употреба (това е свързано с AI) и трябва да работи на компютър от нисък клас, но простото създаване на масив изглежда е загуба пространство, тъй като имам само около 50 различни идентификатора на дадена карта.

Мислех, че създаването на 2d масив от 8-битови символи ще бъде достатъчно, но това е изключено с actionscript 3, той няма 8-битов тип данни. Мога ли да използвам вектори с низове или нещо подобно? Затова ви питам кой би бил най-ефективният начин?


person kebrus    schedule 16.04.2012    source източник
comment
Моят съвет: не оптимизирайте предварително. Напишете го в разумни граници, за да работи и след това го профилирайте, за да видите къде всъщност са вашите тесни места. Ако бях аз, щях да използвам Vector.<uint> с фиксиран размер, докато профилирането не ми каже, че не е достатъчно бързо. Всяка оптимизация преди това е само гадаене.   -  person J. Holmes    schedule 16.04.2012
comment
+1 към казаното от 32bitkid. Вектор с фиксиран размер най-вероятно ще бъде най-бързият ви вариант. Освен това имате възможност да използвате ByteArray, което ще ви даде повече контрол. help.adobe.com/en_US/FlashPlatform/ справка/actionscript/3/   -  person francis    schedule 16.04.2012
comment
ByteArray изглежда е това, което търсих, просто не съм сигурен дали всъщност е достатъчно бързо за мен. Ще приема съвета ти, 32bitkid, засега работи с обикновен 2d масив, но ще имам предвид bytearray и вектори   -  person kebrus    schedule 16.04.2012


Отговори (1)


Вероятно начинът да отидете е да използвате ByteArray - http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/utils/ByteArray.html. Можете да четете и пишете един или повече байта наведнъж. Можете дори да използвате функцията за компресиране, за да намалите размера му (това всъщност го „ципира“)

Трябва да „изравните“ картата в масива от байтове, т.е. map[i][j] ще се съхранява в byteArray[i*nr_columns + j]

person Mircea    schedule 16.04.2012