Регистрация: May 2007
Сообщений: 181
|
Какой-то старнный алгоритм чтения данных, Socket позвояет подписаться на событие ProgressEvent.SOCKET_DATA, в нем и нужно считывать данные, таймер не нужен. Что касается рассинхронизаций - в одно время долго пытался наладить синхронизацию клиентов в р2р-сети, к сожалению, так и не удалось достичь необходимого урвоня детерминированности игрового мира - уж не знаю, Flash тому виной, или я недостаточно постиг дзен, но, как мне кажется, для Flash-клиента такой метод не подходит - в силу низкой точности таймеров и вычислений. Потому перешел на иерархическую клиент-серверную архитектуру, где все расчёты игрового мира проводит сервер, выдавая клиентам только информацию об изменениях. Но и с этим архитектурным решением порой появляются проблемы с синхронизацией, впрочем, это уже пробелмы реализации.
Реализацией своего протокола не заморачивался, есть готовые библиотеки для работы с AMF(по крайней мере, под Java и C# - точно есть), очень удобный формат, использую его даже для клиент-серверных приложений без использования Flash(в качестве альтернативы можно посмотреть protobuf). Если есть проблемы с буферизацией сообщений(т.н. "слипание"), советую проверить, реализована ли очискта буфера исходящего потока на сервере после записи сообщения(обычно это метод flush).
P.S. Когда-то на форуме проскакивала ссылка на 2D игрушку, а-ля Quake, автором которой, если не ошибаюсь, являлся кто-то из завсегдатаев flasher.ru. К сожалению, не могу найти ссылку, но это была единственная игрушка на AS, в которой был нормально реализован real-time multiplayer, по крайней мере из тех, что я видел - возможно кто-то помнит о чем речь, и подскажет ссылку и контакты автора, буду благодарен.
|