Flash

Открытие сундуков

Сделал реализацию на Flash по открытию сундуков, при получении сигнала об открытии, сундук на карте открывается (меняется объект) и показывается панель сундука, в которую подгружаются виды вещей(объектов), которые в нем лежат.

Образы решил увеличить для наглядности в два раза.

7maze - Лабиринты зыби, содержимое сундука

Реализация сундуков

Сделал реализацию открытия сундуков.

На клиенте

var sunduk = _root.maybeOpen(tx,ty);
if (sunduk && dx<=1 && dy<=1)
_root.openChest(tx,ty);

Функция maybeOpen - просто проверяет что на карте в (x,y) находиться сундук (открытый или закрытый), а функция openChest - посылает на сервер сигнал open_chest.

На сервере

Реализация сбора рапаппилы

Начал реализацию сбора рапаппилы, самое просто - завел объект:

#define MAZE_OBJ_RAPAPPILA 0x25
#define MAZE_OBJ_RAPAPPILA_V 0x26

MAZE_OBJ_RAPAPPILA_V - это объект - "выкорчеванная рапаппила", дырка в земле.

А в Flash, соответственно сделал прорисовку этих объектов.
Также в флэшке сделал кнопку сбор рапаппилы, которая появляется если герой стоит на клетке с рапаппилой.
Кнопка становится неактивная если у героя нет с собой сумки.

Карта


Делаю глобальную "мировую" карту. Рисую в Flash, вообще конечно идею/графику мне подкинул Илля Варгатий , за что ему большое спасибо (жаль что контакт прервался).

Рисую и пристыковываю

Герой с топором
Начал прорисовывать, но эта аццкая работа :)

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

Флэшка test_engine.fla - можно скачать, как в принципе и axe.fla.

Составная загрузка

Наконец-то дошли руки и до этого :)
Реализация оказалось тоже довльно простой, для начала пришлось чуть переписать функицю удаленной загрузки loadclipfromserver, добавив ему параметр root, не путать с _root. И маленькая правочка вместо:
var mc:MovieClip = _root.createEmptyMovieClip(nameclip, -1); стало var mc:MovieClip = root.createEmptyMovieClip(nameclip, -1);
и все :)
Загрузка конечно стало не просто вызов функции, а сначала создание основного клипа:

Думаю

Все думаю насчет героя и аммуниции, спросил совета на форуме www.flasher.ru и вроде бы его получил :)
Что не может не радовать, т.к. получил ответ на оба варианта моих задумок:
1) грузить разными клипами и объединять их в один
2) скрывать на клипе все сейчас не нужное(например в оружии меч, если выбран топор и тому подобного множество вещей)

Косяки

Когда начал делать арену, понял какой ужасный код получился и сколько в нем косяков и багов.

Во-первых пришлось срочно добавить переменную очередности - чтоб клиент знал, кто сейчас ходит.
Во-вторых у при получение данных о существе если это был игрок (id>10000) то второму игроку не передавалось его HP, а у меня было повязано на это условие - нет HP - не показывался персонаж (считалось что он уже умер)

Но самый главный косяк и не продуманность была в getaction - получении и обработки команд с сервера.

Инвентарь. Заключительная часть

В Flash передача оказалась (как и предполагалась) ерундовым делом:
Кнопка, на кнопке onPress.
on (press) {
btn_apply._visible = false;
var inv='';for(var i=0;i<_root.itemsList.length;i++) {
var tmp = itemsList[i].id.toString(16);
if (tmp.length<6) { var i=6-tmp.length; for(var j=0;j<i;j++) {tmp='0'+tmp;} }
inv+=itemsList[i].place.toString(16)+tmp;
}
loadVariablesNum(_root.host+"/maze?action=set_inv&inv="+inv+"&sessionid="+_root.session,0);
}

Ну да в Flash'ку пришлось передавать host, ну думаю может и не надо.

На стороне сервера :

Инвентарь, продолжение

инвентарь,7maze
С инвентарем получилось как-то с одной стороны проще, а с другой - сложнее.
Провозился в целом, а онлайн для подрузки описаний и параметров вещей и вовсе не потребовался.
В Flash нарисовал картинку - силуэт человека и квадраты куда можно понавесить вещей (оригинально, правда? :).
Создаю два массива:

var itemsList = new Array;
var nameList = new Array;
RSS-материал