AS3 Object Pool для звуковых эффектов - PullRequest
0 голосов
/ 01 ноября 2011

Я создаю игру, в которой мне нужна верхняя ручка МНОГО звуковых эффектов.Я создал пул объектов , чтобы эффекты могли использовать их повторно.Моя проблема в том, как мне написать хорошее решение для пула, не создавая пул для каждого типа звука.Функция извлечения из пула возвращает первый звук в списке.

Это небольшое грязное решение проверяет, имеет ли элемент, который мы заимствуем из пула, тот же звук, который я хочу создать.Если это тот же звук, я больше не буду создавать звук.Если это не так, я создаю его, даже если знаю, что в пуле есть правильные звуки.

var item : ISoundItem = _soundPool.checkOut();

if(item.name != name)
    item.create(name, _soundFactory.create(name), config);

Это грязное решение сократило мои экземпляры примерно до семи с сотен, но я думаю, что могу оптимизировать его еще больше.

Я думал передать имя звукафункция проверки, но стоит ли каждый раз проходить по бассейну?

Есть идеи?

1 Ответ

1 голос
/ 01 ноября 2011

Если вы ищете быстрый поиск и у вас много разных звуков, вы можете рассмотреть возможность использования объекта Dictionary для хранения звуковых ссылок вместо Vector или Array. Словари не используют итерации для поиска - это всегда один-к-одному. Вы бы сделали что-то вроде этого:

var item : ISoundItem = _soundPool.checkOut(MySoundA);
var item : ISoundItem = _soundPool.checkOut(MySoundB);

Обращение по имени в этом случае не облагается штрафом. Вы бы хотели убедиться, что ваш класс будет позволять добавлять в ваш Словарь только объекты, которые реализуют ISoundItem.

Эта реализация зависит от того, как часто вы используете звуки. Если вы не используете их часто, это, вероятно, будет работать нормально. Если это длинные звуки или вы используете их очень быстро, вы можете составить словарь массивов или что-то в этом роде.

...