Hi,

Thanks to everyone for the suggestions.  Many different things to try out.  
I'll probably start by eliminating all my checks and see how that goes first.

Irv

> On Mar 1, 2022, at 3:02 PM, 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