Hey guys, I'm trying to develop a MMO, I already the terrain, a few characters, objects, and items. But now I am trying to make it online. So far I was able to connect to the server, update my position and stuff like that. If another player connects he will see the position the others characters were when he logged in. No update.
Now I'm trying to make a update during the game, so when a player move, the other sees it. But when I tried to do that it looks like the server can't keep up or something like that. When the player stops moving it will always go back a little bit. I'm not really sure what happens.
Also besides that every time there is a update from the server the screen flashes, as if the camera went to another position for a single frame.
Client:
forever()
{
if(availableMessage())
{
updatePositions();
}
getInput();
simulate();
}
Server:
forever()
{
if(availableInput())
getInput();
simulate();
broadcastChanges();
Sleep(100);//Without this the flashing is way more frequent
}
The server broadcast everything, not just what changed. Maybe that might be a problem.
The weirdest part is that the player goes back for the other players too.
English is not my primary language so forgive me if I made any mistake.
Solution:
The screen flashed every time because the server was trying to update the y position for the player but the simulation on the client always changed it back.
I found out that the gravity on the server was switched off which caused the player to go to a higher position on update and instantly go back to ground level.
The delay was caused by the Sleep(100); that I used to test the flashing. Since messages were received in another socket if the client sent a stop message right before the server simulation the simulation treated as if he stopped on the last simulation, 100ms before.
I solved that by erasing the Sleep(100); and creating a timer on the loop that every 100ms he called the broadcastChanges();