Простая панель инвентаря для игр-квестов на ActionScript 2.0

Если вы когда-либо делали flash-квесты, то наверняка знаете, как трудно в играх этого жанра создать такой традиционный элемент, как панель инвентаря. Это ещё более сложно, если игровых героев не один, а несколько. Вот для такого случая и был создан класс Inventory на ActionScript 2.0. Ничего "крутого" в нём, конечно, нет. Но класс Inventory позволяет минимальным количеством кода создать простую панель инвентаря, а затем управлять инвентарём при помощи понятных и удобных команд. Выглядит это примерно так:

Для создания показанной выше панели понадобилось всего три строчки кода...

Код ActionScript 2.0:

/* импорт класса */ import Inventory; /* создаём панель инвентаря */ var invent:Inventory = new Inventory(this, "Hero #1", 4, 2, 50, 50, ["branch", "lupa", "shield"]); /* устанавливаем координаты для панели инвентаря */ invent.coord(50, 50);

Конструктор объекта Inventory принимает следующие параметры:

- 1-й параметр - объект-контейнер, в который будет помещена панель инвентаря;

- 2-й параметр - подпись/заголовок над панелькой;

- 3-й параметр - количество столбцов у панели;

- 4-й параметр - количество строк;

- 5-й параметр - ширина ячеек у панели;

- 6-й параметр - высота ячеек;

- 7-й параметр - массив, в котором перечислены предметы, доступные для помещения в данную панель инвентаря. Но это не просто названия предметов, а уникальные идентификаторы, которые задаются в Linkage Properties. Для тех, кто забыл, как устанавливаются такие идентификаторы, напоминаю:

1.) Открываем библиотеку проекта.

2.) Правым кликом мышки вызываем контекстное меню над интересующим нас MovieClip-ом.

3.) В контекстном меню жмём пункт Linkage....

4.) В открывшемся окне вводим свой уникальный идентификатор.

5.) Ставим галочку у пункта Export for ActionScript.

6.) Сохраняем изменения. Всё.

Теперь, допустим, вам надо в инвентарь добавить какой-то предмет (например, "branch" - ветку)...

Код ActionScript 2.0:

/* импорт класса */ import Inventory; /* создаём панель инвентаря */ var invent:Inventory = new Inventory(this, "Hero #1", 2, 4, 50, 50, ["branch", "lupa", "shield"]); /* устанавливаем координаты для панели инвентаря */ invent.coord(50, 50); /* добавляем предмет в инвентарь */ branch.onPress = function() { if (invent.add("branch","ветка")) { this._visible = false; invent.addJournal("В инвентарь добавлена ветка."); } };

Результат:

Как видите, на сцене у нас есть мувиклип branch (рисунок ветки), который является экземпляром MovieClip-а с одноимённым уникальным идентификатором. Если пользователь кликает по данному мувику, то программа пытается добавить предмет (ветку) в инвентарь с помощью метода add() (первый параметр - это уникальный идентификатор предмета в библиотеке проекта, а второй параметр - пояснительный текст к предмету). Если предмет успешно добавляется, то метод add() возвращает true. А если добавить предмет не получилось (нет места в инвентаре или данный предмет отсутствует в списке разрешённых к добавлению предметов), то возвращается false. А с помощью метода addJournal() можно добавить новую запись в журнал (вызывается кликом по круглой кнопке с "+").

Думаю, ничего сложного нет.

А теперь кратко опишу другие методы класса Inventory:

- метод del() - удаляет предмет из инвентаря; в качестве единственного параметра принимает уникальный идентификатор предмета;

Код ActionScript 2.0:

/* импорт класса */ import Inventory; /* создаём панель инвентаря */ var invent:Inventory = new Inventory(this, "Hero #1", 2, 2, 60, 60, ["lupa"]); /* устанавливаем координаты для панели инвентаря */ invent.coord(50, 50); /* добавляем предметы в инвентарь */ lupa.onPress = function() { if (invent.add("lupa","лупа")) { delLupa._visible = true; this._visible = false; invent.addJournal("В инвентарь добавлена лупа.","лупа"); } }; /* кнопка удаления лупы */ delLupa._visible = false; delLupa.onPress = function() { if (invent.have("lupa")) { this._visible = false; invent.del("lupa"); trace("Лупа удалена!!!"); } else { trace("Лупа в инвентаре отсутствует!!!"); } };

Результат:

- метод delAll() - удаляет все предметы из инвентаря;

- метод activCell() - возвращает уникальный идентификатор того предмета, который в данный момент выделен в инвентаре;

- метод allowed() - в качестве единственного параметра принимает уникальный идентификатор и возвращает true или false в зависимости от того, можно ли предмет с этим идентификатором добавить в данную панель инвентаря;

- метод have() - в качестве единственного параметра принимает уникальный идентификатор и возвращает true или false в зависимости от того, присутствует ли предмет с данным идентификатором в данном инвентаре;

- методы hide() и show() - используются для того, чтобы делать панель инвентаря невидимой/видимой;

- метод addAvailable() - расширяет список предметов, разрешённых к добавлению в инвентарь; в качестве единственного параметра принимается ун. идентификатор предмета;

- метод delAvailable() - удаляет предмет из списка разрешённых; в качестве параметра принимает идентификатор, а возвращает true (успешное удаление) или false (неудача);

- методы coord() и coordAnim() - изменяют координаты у панели инвентаря и принимают в качестве параметров новые координаты по оси X и Y;

- метод light() - подсвечивает ячейку с определённым предметом; в качестве единственного параметра принимает идентификатор предмета;

- методы saveInfo() и loadInfo() - сохраняют/загружают данные из LSO; первый параметр у этих функций - это тоже самое, что и первый параметр у метода getLocal() класса SharedObject; второй параметр - это имя переменной, в которой будет храниться информация (это сделано для того, чтобы не было конфликта с другими переменными).

Пример использования

Если вы что-то не поняли, то загляните в исходники или задайте вопрос в комментариях к этому посту. Исходники и сам класс Inventory скачать можно здесь - скачать исходники (под Macromedia Flash 8).

Автор: admin

Дата добавления: 2012-09-03

Просмотров: 13518

Рейтинг поста: +29-

Правила перепечатки

Социальные закладки:
Комментарии:
Комментатор
Комментарий добавил(а): Николай
Дата добавления: 2013-01-25
Вопрос по теме инвентаря. Вставил класс. Импортировал удачно. Вписал все предметы при создании инвентаря. Предметы переносятся все нормально.Но есть несколько проблем.
1) могу переносить предметы только в кадре в котором прописан код,в остальных кадрах нет.Хотя прописаны все предметы там в скобках из всех кадров.
2) При переходе по кадрам все сохраняется все ок,но при повторном заходе в кадр где брал предметы- предметы из инвентаря исчезают.
P.S. Из серии стою на асфальте я в лыжи обутый, то ли лыжи не едут то ли я .......
Комментатор
Комментарий добавил(а): edapskov
Дата добавления: 2013-01-25
Если какая-то переменная нужна в течении всей игры, то её надо создать только ОДИН раз В НАЧАЛЕ игры. Потом эта переменная будет доступна во всех последующих кадрах.

Обычно, если делают по-кадрово, то используют следующую структуру:

- 1-й кадр - прелоадер

- 2-й кадр - служебный (в нём-то и можно объявить ваши глобальные переменные)

- последющие кадры - игра

Причём через 2-й кадр приложение должно проходить только один раз.

Что до анимации, то на главной сцене её не принято делать. Если анимируют героев, то делают анимацию внутри мувика с героем. Если фон, то анимация тоже внутри мувика.
Комментатор
Комментарий добавил(а): Николай
Дата добавления: 2013-01-25
Пример. Покупка инвентаря осуществляется в 4-х разных кадрах которые связанны между собой переходом кнопками. Так же потом этот инвентарь должен сохраняться еще в других кадрах. А потом еще каким то чудом осуществить действие инвентаря в определенном кадре. Тоесть я должен код инвентаря делать для каждого кадра свой? И при переходе из магазина в магазин он исчезает кстати почему то :)
P.S. Мои знания пока позволили только изменить внешний вид контейнера инвентаря и текст :)
Комментатор
Комментарий добавил(а): Николай
Дата добавления: 2013-01-25
Это Вы зря- я же теперь достану :)

Вот смотрите. У меня нарисован я бы сказал мультик ну или картинка. Переход между кадрами осуществляется покадровой анимацией, анимацией движения, переходом между кадрами с помощью кнопок. Так же все разбито по слоям которые не связаны друг с другом- разные действа. Вот вопрос- мне получается нужно прописывать код в каждом кадре в зависимости от того что там будет происходить? или так тоже игру не делают? :)
Комментатор
Комментарий добавил(а): edapskov
Дата добавления: 2013-01-25
Понимаю. Обращайтесь, если что :-)
Комментатор
Комментарий добавил(а): Николай
Дата добавления: 2013-01-24
Дело в том что я и есть аниматор. Классно рисую. Делал небольшие мультфильмы. Сейчас пытаюсь эти навыки использовать для программирования игр. Но помоему ничего общего с моими знаниями тут нет. Игра полностью нарисовать а запрограммировать элементарные действия для меня мега проблема. Хотя итак свел программирования к минимуму.
Комментатор
Комментарий добавил(а): edapskov
Дата добавления: 2013-01-24
> Все разместить в одной сцене просто раскидать на кадры и все. да?)

Можно и так. А часто приложение состоит всего из одного кадра. Просто переходы между кадрами в более-менее сложном приложении могут породить кучу проблем.

> Плюс сцены можно по слоям же сделать. да? вот это я прозрел сейчас)

Забудьте вы о сценах - они не для программистов, а для аниматоров.
Комментатор
Комментарий добавил(а): Николай
Дата добавления: 2013-01-24
Плюс сцены можно по слоям же сделать. да? вот это я прозрел сейчас)
Комментатор
Комментарий добавил(а): Николай
Дата добавления: 2013-01-24
До меня кажется дошло). Все разместить в одной сцене просто раскидать на кадры и все. да?)
Комментатор
Комментарий добавил(а): Николай
Дата добавления: 2013-01-24
Правильно я понял что в создании игры нельзя использовать несколько сцен? у меня их уже 8. по другому не получится потому что у меня переходы между боем-площадью-магазином и т.д. Как быть тогда?
Добавить комментарий:







[ + ] помощь по форматирование текста

Идиот-тест

Если все обязательные поля (отмечены * ) заполнены необходимой информацией, то нажимаем кнопку Добавить комментарий.

Страница 3 из 8: 123458
Меню
Подписка
Рубрики
Метки
Последние комментарии
Рейтинг постов
Реклама
Друзья
География гостей
Статистика
Яндекс.Метрика