|
|
|||||
Регистрация: Apr 2010
Сообщений: 137
|
Хранение итемов
Мучает вопрос уже очень долго время, всегда делал одним способом, но он начал надоедать.
Если у игрока может быть разное оружие, например пистолеты, то как их хранить у себя в игре? Как их получать? Конкретнее. Каждое оружие выглядит по своему. Вот в библиотеке есть мувики McPistol1, McPistol2, и есть класс Pistol. В классе Pistol есть, например, _id, _mc, _damage, и разных пистолетов около 100. Я раньше делал константу, COUNT = 100, а далее, чтобы получить пистолет: public static function getItem(_id:uint):Pistol { var _ret:Pistol = new Pistol(); switch (_id) { case 1: _ret._mc = new McPistol1(); _ret._damage = 10; break; case 2: _ret._mc = new McPistol2(); _ret._damage = 15; break; } _ret._id = _id; return _ret; } getDefinitionByName("McPistol" + String(_id)); но понятное дело он мне ошибку, так как то, что я просил, не было вкомпилино во флешку, так как не юзается в коде нигде. Как тогда быть? Надеюсь вопрос понятно поставил). |
|
|||||
Регистрация: Dec 2010
Адрес: Ярославль
Сообщений: 1,255
|
Цитата:
В этом случае эти два класса буду включены в swf. |
|
|||||
А зачем каждый раз создавать новый пистолет?
То есть в игре нет какого-то магазина, где представлены все виды оружия? Я обычно делаю так: просто храню в массиве уже созданные экземпляры каждого вида оружия. Они отображаются в магазине, и они же используются в игре. За исключением тех случаев, когда надо больше одного экземпляра. Кто-то может сказать, что это бесполезный расход памяти, но на самом деле у этого подхода есть плюсы. Которые особенно заметны, если писать под мобилу, где при создании нового экземпляра часто игра подвисает. Поэтому принял решение создавать все, что нужно сразу. А нужный образец потом гораздо проще дернуть из массива. Каким-нибудь методом с простым перебором |
|
|||||
Регистрация: Jan 2013
Сообщений: 322
|
если в swc компильнуть пистолеты и подключить то классы все равно видно не будет?
|
|
|||||
Регистрация: Apr 2010
Сообщений: 137
|
Цитата:
new Pistol1(), new Pistol2(), new Pistol3() т.е. приходится вручную каждый итем вызывать. Думал может есть способ какой, чтобы если я добавлю новое оружие в ту же библиотеку swc например, то на этом вся моя работа и заканчивалась бы. Т.е. перебираю все возможные мувики в библиотеке, которые называются по правилу "Pistol" + _id, и увеличиваю счетчик до тех пор, пока такие мувики находятся, а когда не находятся, то всё, значит у меня _i итемов, и я не объявлял каждый отдельно, могу получить их по _id. Ну как и говорил, этот метод из-за getDefinitionByName не работает, в любом случае потом приходится писать Pistol1, Pistol2 чтобы компилятор их учел. Ну раз я не один такой, кто так же методом перебора всех существующих итемов делает, то ладно) |
|
|||||
Регистрация: Jan 2013
Сообщений: 322
|
TurboDizel, у компилятора есть опция -include-libraries
http://help.adobe.com/en_US/flex/usi...9084-7a92.html в fd во вкладке Сompiler Options называется SWC Include Libraries, там просто прописываешь lib/lib.swc во flash ide хз, не юзаю |
|
|||||
Подумай над такой идеей, если все пистолеты запихать в один мувик, в разные кадры, вызываешь один мувик пистолет, и потом переключаешь на какой кадр тебе нужно, по сути там не чего сложного нет.
__________________
Книги и желание лучшие учителя. |
|
|||||
Регистрация: Jan 2013
Сообщений: 322
|
в flash ide если вариантов нет можно юзануть jsfl
http://help.adobe.com/en_US/flash/cs..._extending.pdf но там еще понять надо как отследить добавление клипа в библиотеку. может быть переопределить методы library.*Item или еще как то как отследить компиляцию тоже не видать поиском можно даже файл внешний создать > Chapter 18: FLfile object |
Часовой пояс GMT +4, время: 22:26. |
|
« Предыдущая тема | Следующая тема » |
|
|