Показать сообщение отдельно
Старый 14.01.2015, 18:11
TurboDizel вне форума Посмотреть профиль Отправить личное сообщение для TurboDizel Найти все сообщения от TurboDizel
  № 6  
Ответить с цитированием
TurboDizel
 
Аватар для TurboDizel

Регистрация: Apr 2010
Сообщений: 137
Цитата:
Сообщение от caseyryan Посмотреть сообщение
А зачем каждый раз создавать новый пистолет?
То есть в игре нет какого-то магазина, где представлены все виды оружия?
Я обычно делаю так: просто храню в массиве уже созданные экземпляры каждого вида оружия. Они отображаются в магазине, и они же используются в игре. За исключением тех случаев, когда надо больше одного экземпляра.
Кто-то может сказать, что это бесполезный расход памяти, но на самом деле у этого подхода есть плюсы. Которые особенно заметны, если писать под мобилу, где при создании нового экземпляра часто игра подвисает. Поэтому принял решение создавать все, что нужно сразу. А нужный образец потом гораздо проще дернуть из массива. Каким-нибудь методом с простым перебором
Код AS3:
private var _pistols:Array = [new Pistol1(), new Pistol2(), new Pistol3()];
 
private function getPistolByID(id:int):Pistol {
   for each (var pistol:Pistol in _pistols) {
      if (pistol.id == id) return pistol;
   } 
   return null;
}
Ну вот именно таким я не хочу заниматься
new Pistol1(), new Pistol2(), new Pistol3()
т.е. приходится вручную каждый итем вызывать. Думал может есть способ какой, чтобы если я добавлю новое оружие в ту же библиотеку swc например, то на этом вся моя работа и заканчивалась бы. Т.е. перебираю все возможные мувики в библиотеке, которые называются по правилу "Pistol" + _id, и увеличиваю счетчик до тех пор, пока такие мувики находятся, а когда не находятся, то всё, значит у меня _i итемов, и я не объявлял каждый отдельно, могу получить их по _id. Ну как и говорил, этот метод из-за getDefinitionByName не работает, в любом случае потом приходится писать Pistol1, Pistol2 чтобы компилятор их учел.
Ну раз я не один такой, кто так же методом перебора всех существующих итемов делает, то ладно)