Название: [НЕ РЕШЕНО] Танчики на 2 игроков по сети. ПРоблема с сервером. Отправлено: lolbla2 от Февраль 14, 2012, 18:52 Проблема в следующем: когда оба игрока двигаются или выполняют какие-то действия всё норм, но когда один ничего не делает,а другой например едет, то почему-то у того кто ничего не делает противоположный игрок передвигается рывками, то есть ощущение будто пинг ужасный, хотя на самом деле это не так, ведь когда оба двигаются у всех всё нормально. Я подумал дело в сервере? Хотя может и проблема в клиентах.
Игра состоит из серверного приложения и клиентского. Оба клиента передают инфу серверу, а сервер уже от 1 игрока передает инфу 2 игроку, а от 2-го наоборот 1-му. Помогите кто знает как решить траблу.... Вот исходник сервера: Структура Input Код: struct Input Код: struct PlayerInfo Название: Re: Танчики на 2 игроков по сети. ПРоблема с сервером. Отправлено: Bepec от Февраль 15, 2012, 08:39 А можно проектик? Хоцца посмотреть и поиграться :D
Название: Re: Танчики на 2 игроков по сети. ПРоблема с сервером. Отправлено: SimpleSunny от Февраль 15, 2012, 12:28 1. Удалите из конструктора, это лишнее.
socket1 = new QTcpSocket(this); socket2 = new QTcpSocket(this); 2. Неправильно читаете данные while(socket1->bytesAvailable()) socket1->read((char*)player1,sizeof(*player1)); 2.1 Нет гарантии, что пришли все данные, надо проверять это if (socket1->bytesAvailable() >= FRAME_SIZE) in >> player1; 2.2 Нельзя так читать данные напрямую в структуру, проблема может быть из-за разных Endians, выравнивания. Используйте лучше QDataStream. 3. write аналогично сделать через QDataStream 4. Установите для сокета LowDelayOption 1. После write делайте flush. Название: Re: Танчики на 2 игроков по сети. ПРоблема с сервером. Отправлено: lolbla2 от Февраль 15, 2012, 13:36 1. Удалите из конструктора, это лишнее. socket1 = new QTcpSocket(this); socket2 = new QTcpSocket(this); 2. Неправильно читаете данные while(socket1->bytesAvailable()) socket1->read((char*)player1,sizeof(*player1)); 2.1 Нет гарантии, что пришли все данные, надо проверять это if (socket1->bytesAvailable() >= FRAME_SIZE) in >> player1; 2.2 Нельзя так читать данные напрямую в структуру, проблема может быть из-за разных Endians, выравнивания. Используйте лучше QDataStream. 3. write аналогично сделать через QDataStream 4. Установите для сокета LowDelayOption 1. После write делайте flush. У меня раньше было через этот QDataStream, но было так что Input player1; то есть не ссылка, а сам объект и потом там всякие проверки как в примере ну и in>>player1; при этом ещё медленее работало Надо ссылку на объект в датастрим пихать тоесть Input *player1 ? Название: Re: Танчики на 2 игроков по сети. ПРоблема с сервером. Отправлено: SimpleSunny от Февраль 15, 2012, 15:13 Честно говоря не понял о чем вы.
Код
Иcпользовать так Код
Название: Re: Танчики на 2 игроков по сети. ПРоблема с сервером. Отправлено: lolbla2 от Февраль 15, 2012, 15:28 Честно говоря не понял о чем вы. Код
Иcпользовать так Код
Я уже так пробовал делать, ещё хуже тормозило, поэтому подумал может надо Иcпользовать так Код
Возможно так быстрее будет работать или не влияет? Название: Re: Танчики на 2 игроков по сети. ПРоблема с сервером. Отправлено: SimpleSunny от Февраль 15, 2012, 16:30 Не влияет.
Название: Re: Танчики на 2 игроков по сети. ПРоблема с сервером. Отправлено: lolbla2 от Февраль 15, 2012, 20:29 Не влияет. просто у меня раньше через QDataStream было и ещё хуже тормозило, вот и делай выводы... Название: Re: Танчики на 2 игроков по сети. ПРоблема с сервером. Отправлено: merke от Февраль 16, 2012, 19:05 Не влияет. просто у меня раньше через QDataStream было и ещё хуже тормозило, вот и делай выводы... Что за бред, ни чего не будет тормозить, перестрой структуру сервера, используй только датастрим и будет тебе счастье. Название: Re: Танчики на 2 игроков по сети. ПРоблема с сервером. Отправлено: lolbla2 от Февраль 17, 2012, 05:43 Не влияет. просто у меня раньше через QDataStream было и ещё хуже тормозило, вот и делай выводы... Что за бред, ни чего не будет тормозить, перестрой структуру сервера, используй только датастрим и будет тебе счастье. Да до этого было с датастримом просто, потом переделал не через датастрим быстрее стало работать Название: Re: Танчики на 2 игроков по сети. ПРоблема с сервером. Отправлено: SimpleSunny от Февраль 17, 2012, 12:03 На клиенте тоже через datastream.
Задержки, если и появляются, то из-за кривого сервера\клиента, но не из-за datastream. Название: Re: Танчики на 2 игроков по сети. ПРоблема с сервером. Отправлено: lolbla2 от Февраль 17, 2012, 18:46 Не знаю тогда почему с socket1->read((char*)player1,sizeof(*player1)); и socket1->write((char*)player1,sizeof(*player1)); быстрее работает, может потому что в QDataStream ещё много всего нагружено...
|