I tried changing the default "fill-in" surface size from 1x1 to 200x200 and removing all the empty 1x1 images in data/characters/noghost, but it had no effect on speed. This error occurred, however, and it seems to be a result of removing the 1x1 images (which caused dynamically generated replacements to be created):
Traceback (most recent call last): File "hand2hand.py", line 1920, in <module> main() File "hand2hand.py", line 1916, in main game.start_game() File "hand2hand.py", line 511, in start_game self.all.update(time_passed) File "/usr/lib/python2.7/site-packages/pygame/sprite.py", line 399, in update for s in self.sprites(): s.update(*args) File "hand2hand.py", line 1789, in update self.draw_rightarm() File "hand2hand.py", line 1809, in draw_rightarm img_a = pygame.surfarray.pixels_alpha(img) File "/usr/lib/python2.7/site-packages/pygame/surfarray.py", line 208, in pixels_alpha return numpysf.pixels_alpha (surface) File "/usr/lib/python2.7/site-packages/pygame/_numpysurfarray.py", line 302, in pixels_alpha offset=start, strides=(4, surface.get_pitch ())) ValueError: strides is incompatible with shape of requested array and size of buffer At any rate, I used cProfiler and copied the results to a text file. It looks like the draw_rightarm, draw_leftarm, and draw_body methods are the main cause for the slowdown in the update methods. Using some instances of print(), I have isolated the slowdown of these methods to the following piece of code, which occurs in all three: # Adjust transparency for row in xrange(0, len(img_a)): for j in xrange(0, len(img_a[row])): img_a[row][j] = int(img_a[row][j] * alpha_percent) img_a is a pygame.surfarray.pixels_alpha object. Based on what I found in the documentation, this seemed like the most efficient and easy way to make an image with per-pixel alpha transparency partially transparent everywhere. But besides this slowdown problem that I'm having here, pixels_alpha seems to be causing other problems, as can be seen above. Is there a better way to do what I'm trying to do in that section of code? I was trying to create a motion trail effect. ________________________________ From: Ian Mallett <geometr...@gmail.com> To: pygame-users@seul.org Sent: Tue, April 12, 2011 7:53:24 PM Subject: Re: [pygame] Whoa! Bad slowdown! Well, for one thing, on my machine, it segfaults constantly. I tracked it down to ~line 1006: scaled = pygame.transform.smoothscale(img, size) But there doesn't seem to be anything out of the ordinary there. Maybe trying to resize many 1x1 surfaces to 400x400 leads to a memory leak somewhere in PyGame? Ian