Пятница, 22 Ноября 2024, 00:47

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
39DLL
Quad69Дата: Среда, 12 Марта 2014, 22:59 | Сообщение # 1
заслуженный участник
Сейчас нет на сайте
Всем привет!
У меня появилось несколько вопросов про 39DLL, и я решил задать их тут:
1. В 39DLL есть буферы. Зачем они? Что они делают?

2. Может ли отправка начинаться не с writebyte, а например с writeushort?

3. При отправки данных клиенту, могут иногда не доходить. С чем это может быть связано?
zzzzzaДата: Четверг, 13 Марта 2014, 07:52 | Сообщение # 2
участник
Сейчас нет на сайте
1)В информатике буфер — это область памяти, используемая для временного хранения данных при вводе или выводе(Википедия). То есть ты сначала заполняешь буфер, а потом его отправляешь. Разность в том, что он держит в себе информацию и ее каждый раз приходиться ее отчищать.
Пример отправки:
Код
clearbuffer(1); //отчищаем буфер
writebyte(0,1); //записываем в первый буфер 0 байт
sendmessage(server, 0, '', 1); //отправляем все серверу

Раньше, когда 39dylib пользовался, у меня буфер 1 - был для отправки, а буфер 0 - для принятия. Так их можно сделать любыми.
2)Я думаю, что можно. Это легко проверить.
3)На этот вопрос точно не могу ответить. Вообще было давно, когда намудрил с кодом, игра не отвечала, а потом отвисла и все передалось.
Но так же был случай, когда разбирался с передачей файлов. Пытался сам разобраться и приходила только часть файла или через секунды две, приходил один байт, или вообще ничего не приходило. Потом разобрался и понял в чем были ошибки, но смысла объяснять их нет, так как FN и 39DLL отличаются.
XDominatorДата: Четверг, 13 Марта 2014, 10:15 | Сообщение # 3
постоянный участник
Сейчас нет на сайте
Ты можешь пользоваться несколькими буфферами. Например, может возникнуть такая ситуация, что тебе разным клиентам одновременно нужно будет отправить разные наборы данных, но которые будут частично совпадать. Тогда ты можешь просто заполнить несколько буфферов, и отправлять их выборочно нужным игрокам, вместо того чтобы отправлять одному-переписывать-отправлять другому- и так по кругу.

Отправка может начинаться с чего угодно. В 39 ты полностью формируешь структуру пакета, но в FN есть свои особенности, и в их пределах ты ничем не ограничен, начинай хоть со строки.

Данные могут не доходить и смещаться, и после этого могут начать возникать совершенно непредсказуемые рандомные баги - движеие принципиально недвижимых объектов, прилипание координат, и прочее. Подозреваю, что происходит сбивание неких внутренних указателей на память в движке, соответственно нарушаются связи объект-принадлежащая переменная. Происходит такое, если ты где то накосячил с функциями приема\передачи, а конкретнее - если например при приеме пытаешься прочитать лишний несуществующий байт. Вот это - гарантированно забаговывает игру, и процесс восстановлению уже не принадлежит, поможет только перезапуск приложения. Ну а если просто не доходят данные в принципе - проверяй структуру пакета в области где указываешь отправителя и тип пакета, если и там все нормально - значит у тебя просто идут потери на канале. Так же большие сложности могут быть при использовании роутеров, для открытого доступа к серверу нужно настраивать проброс портов. Такие дела.


Ghaarp

The soul lighter(Android, logic)

Zzzzombie RAGE!!!(For android)


Сообщение отредактировал XDominator - Четверг, 13 Марта 2014, 10:17
Quad69Дата: Пятница, 14 Марта 2014, 22:15 | Сообщение # 4
заслуженный участник
Сейчас нет на сайте
Может быть например такое:
В буфер записалась некая информация и перед тем как ещё отправить где-то сработал код который чистит буфер и записывает другую информацию, и в итоге один пакет уже не смог прийти.
zzzzzaДата: Пятница, 14 Марта 2014, 22:27 | Сообщение # 5
участник
Сейчас нет на сайте
maksim1221232, конечно может быть:)
Quad69Дата: Пятница, 14 Марта 2014, 22:39 | Сообщение # 6
заслуженный участник
Сейчас нет на сайте
И ещё помогите мне с буферами.
Я отправляю информацию в буфере 2, а она приходит в буфере 0
Вот исходники: Клик
zzzzzaДата: Суббота, 15 Марта 2014, 10:04 | Сообщение # 7
участник
Сейчас нет на сайте
То что в коде первым выполняется, в тот буфер и приходит. Попробуй их поменять местами. Вообще странный метод принятия.
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг