Нужен программист С++ (boost:asio, winsock2);
У нас уже есть готовая игра, но нет нормального мультиплеера.
Машинки лагают, особенно когда больше 3 игроков.

Пример исходного кода (по синхронизации машин)
if (stream.isReading() && !(owner() && _net->isClient()) && !_player->GetFinished())
{
_dAlpha = 1.0f;
D3DXVECTOR3 dPos = pos - car->GetPxActor().GetPos();
float dPosLength = D3DXVec3Length(&dPos);
if (dPosLength > 4.0f)
{
car->SetPosSync(pos - car->GetGrActor().GetPos());
car->GetPxActor().SetPos(pos);
}
else if (dPosLength > 0.1f)
linVel += dPos * 2.0f * car->GetNxActor()->getMass();*/
D3DXQUATERNION dRot;
QuatRotation(dRot, car->GetGrActor().GetRot(), rot);
D3DXVECTOR3 dRotAxis;
float dRotAngle;
D3DXQuaternionToAxisAngle(&dRot, &dRotAxis, &dRotAngle);
if (abs(dRotAngle) > D3DX_PI/24)
{
car->GetPxActor().SetRot(rot);
car->SetRotSync(dRot);
}
car->GetNxActor()->setLinearMomentum(NxVec3(linVel));
car->GetNxActor()->setAngularMomentum(NxVec3(angVel));
car->SetMoveCar((GameCar::MoveCarState)moveState);
car->SetSteerWheel((GameCar::SteerWheelState)steerState);
car->SetSteerWheelAngle(steerWheelsAngle);
}Telegram: @aspect337
Discord: https://discord.gg/NRBGnjJrWg
Насколько я понял - у вас проблема в том, что машина пытается ехать своим ходом, что приводит к жуткому рассинхрону между клиентами, т.к. двигать физикой один и тот же объект на разных устройствах тупиковый путь - они никогда не будут совпадать))
Нужна какая-то точка синхронизации.
Навскидку приходит такое решение, что игроки передают свой ввод, а все вычисления происходят в 1 месте. Это может быть один из игроков. Остальные должны получать пакетированный таймлайн движения всех машин.
По примеру кода понятно, что вычисление позиции происходит без таймера, или скорее всего с фиксированным таймером внутри некой tick, так как в расчете движение нет короктироваки на время с прошедшего тика... поэтому код мусор и нужно переписывать полностью (как же без этого), и сихронизировать таймер между клиентами и буфер команд чтобы каждый клиент смог вычислить положение сцены сам а не вычилсять отклонение ping и т.д., и делать это нужно в отдельном потоке так как я подозреваю что car в car->GetPxActor().GetPos() это объект редеринга, и коли нет ни одного лока - это всё один поток render.