login:        password:      
Combats Scrolls
Rambler's Top100
Гость БК
Profile Friend page
ru
updated 20.02.10 15:57
20-02-10 @ 13:29

Модификатор Open user info Open user photogallery
Про лаги игры
Думается мне, что во многом "проклятие" тормознутости этой игры заключается в том, что любые размены, любые приёмы - мгновенны. Как пример. Юзает игрок Призрачную защиту - отправляется запрос на сервер, потом он обрабатывается, потом возвращаются данные о состоянии боя на текущий момент. Юзает игрок Усиленные удары - отправляется запрос, обрабатывается, возвращаются данные (в полном объёме). Предположим, я за размен юзаю 1-3 приёма + сам размен. Это 2-4 запроса плюс обработка каждого.

Если взять пример из реальной жизни, то это сравнимо с тем, если бы я подзывал официанта каждый раз на каждый свой заказ. Разумеется, гораздо удобнее было бы сначала составить список того, что я заказываю, и за один раз отдать весь заказ официанту. Как это выглядело бы в БКшных реалиях?

Сначала составляется список приемов, который я хочу использовать в данном размене. Когда я нажимаю кнопку "вперед" - я выражаю свою готовность отправить запрос на сервер (читай: официанту). Сервер проверяет, возможно ли осуществить такой размен (хватает ли тактик, маны, стрел, жив ли персонаж и так далее). Если возможно - то сервер обрабатывает размен и возвращает его. Минус (он же огромный плюс) данной системы в том, что уже невозможно будет наносить мгновенные заклятия (как обычные касты, так и приемы вроде прорыва).

Система, описанная выше, подразумевает, что официант после подхода к каждому столику будет возвращаться на кухню и обратно. Можно ли сделать ещё лучше? Можно!

Официант собирает единовременно все заказы только когда все участники боя их приготовили. Тогда не будет необходимости возвращаться каждый раз с новым заказом, достаточно пройтись один раз. Этим подразумевается, что размены будут единовременные не только для двух противоположных участников боя, а для обеих команд. Тогда бой можно делить на ходы не отдельных персонажей, а на некие "стадии боя" - одновременные ходы всех персов. Это во многом упрощает обновление окна: если в памяти браузера уже хранится информация о стадии боя номер N, то при обновлении окна будет использована локальная информация, а не новая с сервера. К тому же, уверен, это интереснее и с точки зрения самого боя. Проблема будет только в боях 2 на 100, например, когда 50 персонажей бьют в единственный размен одного... Но разве это не логичнее?

Update: Нельзя забывать и о такой мощной библиотеке JS, как jQuery, которая значительно может упростить многие функции на клиентской стороне. Есть еще одна интересная библиотека - Raphaël - но пока что практического применения в рунете я не видел, хотя смотрится очень эффективно.

Я думаю, что это: Scrolls.multiLike:)

view mode: linear threads
View disscussion »
Total disscussion threads: 1 Pages: 1
«« « 1 » »»

Disscuss opened for regisered users only.
Бондя Open user info Open user photogallery
20-02-10 @ 16:05
Re: Про лаги игры
copy link to clipboard
Не катит, т.к. лишний клик вылазит на "применение", а это жирный минус. Не всегда связки идут. Опционально - как вариант.
jQuery к БК лепить смысла нет скорее всего. В покере он и так используется, там к месту т.к. новый продукт. :)
П.С. запросы, наверника, весьма лёгкие, так что скорее нужно искать средства оптимизации настроек БД и быстродействия в целом.)
Модификатор Open user info Open user photogallery
20-02-10 @ 16:15
copy link to clipboard
А почему минус, если кнопку "Вперёд" придётся тыкать так или иначе?:-) У магов это был бы любой приём, требующий полного хода. И тому подобное.
jQuery сам по себе - пожалуй, да. Я привел его лишь как пример довольно мощной библиотеки, которая может найти применение в БК.:-)
В БК я не видел, например, использования ajax. Как пример - его можно было бы использовать на форуме при добавлении комментариев без перезагрузки страницы (как у Севенов на ленте).
Да и вообще последний человеческий скрипт в БК я видел только в astral.js, который довольно-таки молодой, как-никак )
Бондя Open user info Open user photogallery
20-02-10 @ 16:21
Re:
copy link to clipboard
А, да, провтыкал про Вперёд %)))
Бои на аяксе как раз, вроде. Код не смотрел. :)
Модификатор Open user info Open user photogallery
20-02-10 @ 16:24
copy link to clipboard
Да, бои на аяксе.:-) Но не одними же боями ограничивается область его применения.
Хотя сейчас наверняка придёт кто-то умный и скажет, что пихать его куда попало - некошерно.%))
Бондя Open user info Open user photogallery
20-02-10 @ 16:31
Re:
copy link to clipboard
В скроллах аякса достаточно, кстати говоря.)
Модификатор Open user info Open user photogallery
20-02-10 @ 16:33
copy link to clipboard
По-моему, в скроллах как раз не асинхронный jax, а синхронный.:-) Допустим, если тыкнуть на инфу возле твоего ника - появляется надпись "loading", и, если сервер скроллов висит, зависает и браузер )
Но тут да, в целом удобно ) Придраться разве что к ограниченному функционалу можно и периодическим "зависаниям" сервера.
Бондя Open user info Open user photogallery
20-02-10 @ 16:35
Re:
copy link to clipboard
Просто нет обработки негативного ответа, видимо. :)
Модификатор Open user info Open user photogallery
20-02-10 @ 16:38
copy link to clipboard
Это ведь тоже минус.:-)
Бондя Open user info Open user photogallery
20-02-10 @ 16:45
Re:
copy link to clipboard
Напиши повелителю :)
Модификатор Open user info Open user photogallery
20-02-10 @ 16:56
copy link to clipboard
Не знаю, Повелитель меня уже давно игнорит.:-) То ли не читает, то ли ещё что... хз, в общем )
Бондя Open user info Open user photogallery
20-02-10 @ 17:03
Re:
copy link to clipboard
Ответ не обязателен, лишь бы пофиксили. :)))
Модификатор Open user info Open user photogallery
20-02-10 @ 17:13
copy link to clipboard
Сначала самому раскопать стоило бы.:-)
Вот оно:
Цитата:
function loadXMLDoc(url, warn_obj, fun) {

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;
}

Disscuss opened for regisered users only.

Total disscussion threads: 1 Pages: 1
«« « 1 » »»


 
 © 2007–2025 «combats.com»
  18+  
feedback