If this is a first time you visiting Scrolls, please register in Fight Club. If you already registered, please authorize on Fight Club start page with your login and password.
Думается мне, что во многом "проклятие" тормознутости этой игры заключается в том, что любые размены, любые приёмы - мгновенны. Как пример. Юзает игрок Призрачную защиту - отправляется запрос на сервер, потом он обрабатывается, потом возвращаются данные о состоянии боя на текущий момент. Юзает игрок Усиленные удары - отправляется запрос, обрабатывается, возвращаются данные (в полном объёме). Предположим, я за размен юзаю 1-3 приёма + сам размен. Это 2-4 запроса плюс обработка каждого.
Если взять пример из реальной жизни, то это сравнимо с тем, если бы я подзывал официанта каждый раз на каждый свой заказ. Разумеется, гораздо удобнее было бы сначала составить список того, что я заказываю, и за один раз отдать весь заказ официанту. Как это выглядело бы в БКшных реалиях?
Сначала составляется список приемов, который я хочу использовать в данном размене. Когда я нажимаю кнопку "вперед" - я выражаю свою готовность отправить запрос на сервер (читай: официанту). Сервер проверяет, возможно ли осуществить такой размен (хватает ли тактик, маны, стрел, жив ли персонаж и так далее). Если возможно - то сервер обрабатывает размен и возвращает его. Минус (он же огромный плюс) данной системы в том, что уже невозможно будет наносить мгновенные заклятия (как обычные касты, так и приемы вроде прорыва).
Система, описанная выше, подразумевает, что официант после подхода к каждому столику будет возвращаться на кухню и обратно. Можно ли сделать ещё лучше? Можно!
Официант собирает единовременно все заказы только когда все участники боя их приготовили. Тогда не будет необходимости возвращаться каждый раз с новым заказом, достаточно пройтись один раз. Этим подразумевается, что размены будут единовременные не только для двух противоположных участников боя, а для обеих команд. Тогда бой можно делить на ходы не отдельных персонажей, а на некие "стадии боя" - одновременные ходы всех персов. Это во многом упрощает обновление окна: если в памяти браузера уже хранится информация о стадии боя номер N, то при обновлении окна будет использована локальная информация, а не новая с сервера. К тому же, уверен, это интереснее и с точки зрения самого боя. Проблема будет только в боях 2 на 100, например, когда 50 персонажей бьют в единственный размен одного... Но разве это не логичнее?
Update: Нельзя забывать и о такой мощной библиотеке JS, как jQuery, которая значительно может упростить многие функции на клиентской стороне. Есть еще одна интересная библиотека - Raphaël - но пока что практического применения в рунете я не видел, хотя смотрится очень эффективно.
Вам запрещено комментирование в скроллах. Причина: Character level to low
Не катит, т.к. лишний клик вылазит на "применение", а это жирный минус. Не всегда связки идут. Опционально - как вариант. jQuery к БК лепить смысла нет скорее всего. В покере он и так используется, там к месту т.к. новый продукт. :) П.С. запросы, наверника, весьма лёгкие, так что скорее нужно искать средства оптимизации настроек БД и быстродействия в целом.)
А почему минус, если кнопку "Вперёд" придётся тыкать так или иначе?:-) У магов это был бы любой приём, требующий полного хода. И тому подобное. jQuery сам по себе - пожалуй, да. Я привел его лишь как пример довольно мощной библиотеки, которая может найти применение в БК.:-) В БК я не видел, например, использования ajax. Как пример - его можно было бы использовать на форуме при добавлении комментариев без перезагрузки страницы (как у Севенов на ленте). Да и вообще последний человеческий скрипт в БК я видел только в astral.js, который довольно-таки молодой, как-никак )
Да, бои на аяксе.:-) Но не одними же боями ограничивается область его применения. Хотя сейчас наверняка придёт кто-то умный и скажет, что пихать его куда попало - некошерно.%))
По-моему, в скроллах как раз не асинхронный jax, а синхронный.:-) Допустим, если тыкнуть на инфу возле твоего ника - появляется надпись "loading", и, если сервер скроллов висит, зависает и браузер ) Но тут да, в целом удобно ) Придраться разве что к ограниченному функционалу можно и периодическим "зависаниям" сервера.
url = encodeURI(url);
if (!url.match(/\?/)) url += '?' ;
url += '&c=' + Math.random();
var ret = 1;
if (window.ActiveXObject) {
var req = new ActiveXObject("MSxml2.XMLHTTP");
if (req) {
req.open("GET", url, false);
req.onreadystatechange = function() {
if (req.readyState == 4) {
txt = req.responseText;
if (warn_obj) {
warn_obj.innerHTML= '';
warn_obj.style.display = 'none';
}
ret = fun(txt);
} else {
//warn_obj.style.display = '';
//warn_obj.innerHTML= wait;
}
}
req.setRequestHeader('CONTENT-TYPE', 'text/html; codepage=UTF-8;');
req.send();
}
}
return ret;
}