Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Общие вопросы о Flash (не затрагивающие ActionScript) (http://www.flasher.ru/forum/forumdisplay.php?f=60)
-   -   Как сделать квест менеджер (http://www.flasher.ru/forum/showthread.php?t=170810)

markII 02.11.2011 18:52

В принципе мне все стало намного яснее.Спасибо большое за ответы всем.C одной стороны конечно неплохо все запихнуть в один xml файл вручную.В этом есть много плюсов.Например такой xml файл может заполнять кто угодно, например, администратор игры.можно добавлять новые квесты не влезая в БД.Но есть и минус.Если квестов будет больше 100 , то объем такого файла будет почти мегабайт.И каждый раз при загрузке приложения он будет его скачивать.
С Базой данных тоже не все так просто.Во первых за каждый пройденный квест он будет записывать в БД и ждать ответа от сервера.Во вторых нужно сразу заполнять БД для того чтобы потом в нее не лазеть.Но есть плюсы - это экономия времени при загрузке приложения и гарантия того что этот файл никто не посмотрит.
Т.е. получается затык только в том , что квесты нужно передавать в разных форматах.Но эту проблемму решает JSON.Как написал Dukobpa3 можно хранить данные в базе в виде JSONа и парсить его в зависимости от заголовка которые будет в ответе от сервера.
В общем с одной стороны с xml все просто но не продуктивно .С другой стороны с БД все сложно но быстрее и безопаснее.Может быть надо выбрать тот способ которые гибче остальных?Вдруг что то придется добавлять или изменять

Dukobpa3 02.11.2011 23:27

"Лучше потому что лучше" - имхо, не аргумент. С таким же успехом можно джейсон файлики на диске складировать и результат будет тем же.

goodguy 02.11.2011 23:30

Я не говорил "Лучше потому что лучше", а подробно сказал почему лучше.
Джейсон описание уровня - каша-мала. Хуже читается - значит и сам подход хуже.

Dukobpa3 02.11.2011 23:32

Я до сих пор не увидел ни одного аргумента к сожалению. Все твои доводы субъективны. Для меня наоборот джейсон удобнее и проще читается, в то время как хмл избыточен и содержит великое множество шума.

-De- 03.11.2011 00:46

Квесты будут секретные только если их никому не будут выдавать)
Писать в базу каждый пройденный квест придётся в любом случае.
Вам нужно как можно быстрее узнавать, в каком состоянии квест. Быстрее всего - программа-сервер, постоянно висящяя в памяти, которая знает всё о квестах и игроках онлайн. Быстрее всего, т.к. всё о чем надо знает и делает только то, что надо, заточена конкретно под ваши квесты. Только её написать тяжело, не советую вообще.
Потом идёт БД. Потому что по сути у вас в любом случае будет БД, только в случае текстовых форматов вам надо будет предварительно её ещё и распарсить. Ну и информацию об игроке в любом случае из БД доставать, а так есть шанс, что на вопрос "что там у такого-то игрока с квестами" можно будет ответить одним запросом. Утилитку для редактирования квестов написать не сложно.
БД не должна быть для вас сложной, это базовая вещь вообще, не бойтесь её. Индексов главное налепить побольше =))

Psycho Tiger 03.11.2011 00:53

У меня не так. Парсер лишний, только если хотите спихнуть работу на какого-нибудь другого человека )
У меня квесты выглядат так:
Код AS3:

item = new TutorialItem();
item.position = new Point(100, 100);
item.header = "Купи себе значок!";
item.text = "Пионер без значка - как икра без кабачка!\nСкорее отправляйся в МАГАЗИН.";
item.unblockedSquares.push(new Rectangle(686, 80, 90, 80));
item.awaitingClickOnName = RightMenu.SHOP_BUTTON_NAME;
item.callbackWhenTrigger = tutorial1_waitingShopClickTrigger;
item.arrowAt = [665, 115, -90];
super.push(item);

Как видно, здесь можно задать, куда указывает стрелка, от какого элемента ожидается клик и т.д.
Если ожидается не клик, а ответ от сервера - я делаю диспатч баббл эвента, с номером туториала и номером шага. Если туториал сидит на этой точке - то считается, что пункт пройден. Ну, и много всякой ерунды ещё. Блокирую экран Sprite`ом, в котором режу дырки )
callbackWhenTrigger позволяет выполнить код, когда доходит до этого шага - там предоставляется необходимый функционал, вроде viewport.addOnTop у меня подсвечивает объект над областями затемнения. Так же там имеется доступ к главному контроллеру и я в принципе могу приказать что угодно кому угодно.

Dukobpa3 03.11.2011 02:10

Код AS3:

item.callbackWhenTrigger = tutorial1_waitingShopClickTrigger;

А что вот эта штука делает?

Psycho Tiger 03.11.2011 02:13

Когда юзер доходит до этого TutorialItem (50 шагов - 50 TutorialItem`ов) - вызывается этот метод, если он указан.
В нём, например, можно сделать запрос на сервер, или приказать какому-нибудь окошку закрыться.

Dukobpa3 03.11.2011 02:21

А где сами ссылки на коллбеки хранятся?

В итеме понятно. А до вот этой строчки:
Код AS3:

item.callbackWhenTrigger = tutorial1_waitingShopClickTrigger;

Откуда берется значение "tutorial1_waitingShopClickTrigger"?
Какая-то хитрая схема с формированием имени колбека и в таком духе? или хардкод, или где-то в каком-то списке хранится?

markII 03.11.2011 11:36

Цитата:

Код AS3:

item = new TutorialItem();
item.position = new Point(100, 100);
item.header = "Купи себе значок!";
item.text = "Пионер без значка - как икра без кабачка!\nСкорее отправляйся в МАГАЗИН.";
item.unblockedSquares.push(new Rectangle(686, 80, 90, 80));
item.awaitingClickOnName = RightMenu.SHOP_BUTTON_NAME;
item.callbackWhenTrigger = tutorial1_waitingShopClickTrigger;
item.arrowAt = [665, 115, -90];
super.push(item);


Скорее всего это квест забивается вручную, потому что нужен только для тьюториала на сколько я понял.А как быть если
Цитата:

item.callbackWhenTrigger = tutorial1_waitingShopClickTrigger;
задавать динамически?


Часовой пояс GMT +4, время: 10:17.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.