I'm am creating an MMO(probably won't be so massive), and was wondering how to deal with the graphical resources. Obviously, I can't have what could be possibly a few gigs of images and animations loaded up to the client, so I need another way of doing it. I have tried having a php webserver that updates itself and writes to a file that the client draws, however this seems slow. How can I speed up the process of updating the graphics while not having too much into the client?
Networking is usually a bottleneck for real-time multi player games and as such, information sent needs to be kept to an absolute minimum. Adding image deltas (or even full images?) to the packet of information sent to every client during every frame can (as you have discovered) easily reduce your networking to an unusable speed and would not scale well (imagine the network load with a couple of thousand players).
A few random ideas for minimising the amount of texture data on the client are:
- Querying the OS for the screen size and downloading a texture set to suit when the game is first run (that way a large tablet could be given a large texture set while a small phone only gets a small one).
- Asking the user which texture set they want to use and letting them know how much space they need for each option.
- Including a high resolution texture set as a free/cheap add-on in the app store/Google play, which ensures there is enough space before installing it.
You could try the "curling method". I may be butchering this but bare in mind. I went to a talk on social games and how they handle large images and what they do is a technique called curling where they have a high-res, and low-res image. So when the user isn't using the image they get the low-res version, and when they are using it they receive the high-res version. I'm not sure if this helps at all, but it might make the loading be faster.
- Using Highres and lowres pictures for different distances is a pretty good thing to take care of.
- Also you should unload objects that aren't used.
- Everything should be stored local or loaded at the startup of the game.