owenashurst / agar.io-clone

Agar.io clone written with Socket.IO and HTML5 canvas
MIT License
2.88k stars 1.12k forks source link

- #513

Closed johnsmitherson closed 6 years ago

pkaminsky commented 6 years ago

I would definitely look at the server rather than say how the food is drawn. I think everything on the server is done without any knowledge of data structures or algorithmic complexity. For example there's an update loop which iterates through each player, and then calls movePlayer which is yet another O(n^2) nested loops, resulting in 3 nested loops per update. I don't even know what it's doing but that's not going to work. That's supposed to be the easy part, collision detection is supposed to be the bottleneck. I think it's reasonable to start over from scratch (that's what I did), there's nothing in this project that really strikes me as valuable for re-use. It's a good learning example of how to do canvas and websockets, but the game logic itself would need to be redone. If you want to use this I would profile the speed of each different component, such as moving players, populating cells, and doing collision detection, see which one scales the worst.

pkaminsky commented 6 years ago

I should clarify that in my case my ultimate goal was to make a completely different game. If your goal is to make Agar.io I think starting with this project and fixing piece-by-piece by benchmarking each piece, is a good strategy rather than starting over. I am in-progress making a shooting-based multiplayer game. I'm not that far in but I have multiplayer movement and shooting. This project was useful for me to see what other people did, especially on the client side. However my game's performance requirements are even higher and the logic is all different. I am using golang on the backend.