As your world gets bigger and has more objects, your game will slow down
even more. (Even if you directly use openGL, I suspect, although I haven't
used it myself). You will need a spatial index. I have some code that i'm
willing to share, if you're interested (or anyone else here, drop me a
line). You can probably find some other code on the web or you can code
your own spatial index, it's not that hard and it's a good exercise.

Rick.


On Wed, 2 Mar 2022, 00:10 Irv Kalb, <i...@furrypants.com> wrote:

> I am developing a game but I'm running into some cases where the game
> slows down too much.  A few details ...
>
> The game lives in a world whose size is much larger than what the user can
> see in the window.  (For now, the world is 3000 x 3000, but the window is
> 640 x 640 - I could decide to change these later).  There is a central
> player who is controlled by arrow keys.  When the user presses a key or
> keys to move in a direction, the player is an animation that looks like its
> walking, but always stays in the center of the screen - the view in the
> window scrolls in the opposite direction.  There are "enemies" that live in
> this world, new ones are generated all the time, and each moves
> semi-randomly in every frame.  There are also a number of additional
> elements that must be drawn every frame (e.g., walls in a maze and more).
>
> The game is complicated by the fact that the world wraps around both
> horizontally and vertically.  If you move off the top, you show up at the
> bottom, go off the left and you appear on the right, etc.  In my current
> version, in every frame I iterate through all drawable elements, and go
> through some coordinate checking code to determine if the element is
> visible within the window.  This code is more complicated than a simple
> "colliderect()" because I have to account for the potential wrapping in all
> directions.  If the element is within the viewable screen area, I draw it
> (blit), otherwise, I don't do the draw.  I thought this would be a great
> optimization.  But, I'm finding that as the number of enemies grows, the
> overall game slows down.  I'm sure this has to do with the fact that in
> every frame I check their movement (they cannot go through walls), move
> each to a new location, and then decide whether to draw them or not.
>
> I'm wondering if my code to check if an element is within the viewable
> area, is actually doing more work than not bothering to check at all.  My
> question is really about the efficiency of a call to blit in pygame when
> the thing being drawn is outside the viewable area.  I actually have done
> some minor tests, and the game seems to work a little better without doing
> the checking, but I want to get opinions from anyone who might really know.
>
> I will probably wind up limiting the number of enemies, but it would be
> good to know about how efficiently pygame deals with potentially drawing
> outside the window.
>
> Thanks in advance,
>
> Irv
>
>
>
>

Reply via email to