![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|
|
|||||
|
Делаю игру, на подобие такой каких уже дофига, а именно на прокачку персонажа, с предрачитанными на сервере боями.
Уже несколько раз переписал полностью классы отвечающие за отображения сражения двух персов. С предрасчетом боя на сервере нет проблем, там все четко рассчитывается и клиенту приходит строка с параметрами сражения. А вот как лучше поступить дальше? Сейчас у меня происходит так: строка парсится, и из нее выдергиваются данные о каждом ударе, о том кто его нанес, какие повреждения должны быть нанесены жертве и тип удара. Вроде бы все ок, задумка ясна. Но по какой-то причине не получается нормально распределить удары между персонажами. Если бы бились двое, то все просто, но врагов может быть несколько. Так вот, мне не нужно конкретное решение, меня интересует кто бы как сделал подобный алгоритм? Может быть навеется какой-то более интересный подход, чем у меня. Уже голова трещит с этой игрой. Или может кому-то уже доводилось делать такое |
|
|||||
|
Не в строке дело. Я уже сто раз проверял эти сроки. Блин, даже не знаю как объяснить..
Сама строка после первоначального разбиения выглядит так: h-23:0 или так m-0:0 (m = missed) в первой h означает hit (удар), далее уровень повреждения, а последнее число это индекс жертвы в массиве жертв. Эта строка передается в конструктор класса Hit, в котором все раскладывается по полочкам. Все эти объекты hit попадают в общий массив ударов для сценария боя. А далее берется первый удар, проверяется кто его нанес, к этому персонажу добавляется слушатель завершения удара и дается команда идти и нанести удар. Он идет, наносит удар, при этом "использованный" объект Hit вырезается из массива простым _hits.shift(); И в качестве действующего удара опять назначается удар, находящийся на нулевом индексе. И все сначала. Вроде бы все должно быть ок. Но вот время от времени объекты hit относящиеся к первому персонажу заканчиваются, а здоровье у него не на нуле. И в этот момент оба перса тупо останавливаются и ничего больше не делают. Уже и на свой серверный алгоритм грешил, может там что не верно. Брал калькулятор, просчитывал все показатели, по всему должен был бы сдохнуть, а нет, жив. Пришел к выводу, что подход кривой. А посему нужна какая-то другая идея. Может слегка другая реализация этой же идеи, в общем, не знаю.. Что-то я в тупик зашел |
|
|||||
|
Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
|
Что-то как-то сложно.
|
|
|||||
|
Цитата:
Я не проблему прошу помочь найти, а подкинуть идею как это можно по-другому реализовать. Я уже готов переписать весь сценарий боя с нуля, пофиг. Главное нормальный подход найти. |
|
|||||
|
Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
|
Я баттл 5х5 далал так:
1. сервер просчитывал весь протокол баттла до самого конца 2. на каждом шаге баттла были данные о юнитах, виде удара и дамадже 3. я выбирал для каждого шага пару юнитов и показывал анимацию, после чего переходил к следующему шагу все Да, работал без слушателей - по таймингу. В смысле - ничего не слушал от юнитов. |
|
|||||
|
Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
|
Цитата:
А в прототипе баттла было как раз 5х5. |
|
|||||
|
Регистрация: Jan 2009
Сообщений: 1,651
|
У меня небыло расчитанных на сервере боев. Но была пошаговая тактика типа desiples, где бой записывался, а потом законченный бой можно было посмотреть в отдельном окне. Данные тоже приходили строкой, xml-кой, чтобы было проще парсить, но это не важно. Точно так же я брал итем за итемом и отображал на экране, что происходит. Только, я уже говорил, я не очень люблю событийную систему, поэтому у меня просто вызывалась функция nextAction() сцены боя по окончанию нанесения удара.
Честно говоря, мне тяжело представить себе какую-то другой способ запрограммировать подобную боевку. Пока что выглядит так, как будто у тебя где-то объект "съедает" GC. Ну, исходя из "Но вот время от времени объекты hit относящиеся к первому персонажу заканчиваются, а здоровье у него не на нуле". Локальный объект, который подписан на событие, но на который нет глобальной ссылки? Мы тут недавно доказали, что такие объекты GC таки кушает, несмотря на слушатель.
__________________
мой пустой блог |
|
|||||
|
Цитата:
Его сборщик мусора не убивает. У меня стоят проверки на количество объектов. Но раз уж других идей нет, то пока эту попилю. Возможно где-то простейшая оплошность какая-то, но еще не нашел где и какая |
![]() |
![]() |
Часовой пояс GMT +4, время: 00:11. |
|
|
« Предыдущая тема | Следующая тема » |
|
|