[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
Re: [pygame] [BUG] pygame-ctypes
Lenard Lindstrom wrote:
While trying to run 20,000 Light Years in Space, version 1.2 I get 
the following exception:
Traceback (most recent call last):
 File "lightyears.py", line 23, in ?
   startup.Main()
 File "C:\prg\LightYears\code\startup.py", line 81, in Main
   main.Main()
 File "C:\prg\LightYears\code\main.py", line 103, in Main
   quit = Main_Menu_Loop(n, clock, screen, (width, height))
 File "C:\prg\LightYears\code\main.py", line 125, in Main_Menu_Loop
   main_menu = current_menu = menu.Menu([
 File "C:\prg\LightYears\code\menu.py", line 31, in __init__
   (discard1, discard2,
 File "C:\prg\LightYears\code\menu.py", line 149, in __Draw
   extra.Tile_Texture(surf, "greenrust.jpg", r)
 File "C:\prg\LightYears\code\extra.py", line 50, in Tile_Texture
   output.set_clip(rect)
 File "C:\PRG\PYGAME-CTYPES\CTYPES-SOC\pygame\surface.py", line 825, 
in set_cli
p
   SDL_SetClipRect(self._surf, rect)
ctypes.ArgumentError: argument 2: exceptions.TypeError: expected 
LP_SDL_Rect instance instead of _RectProxy
 
Thanks, now fixed in r944.
Since SDL_SetClipRect has argtypes defined _RectProxy's 
_as_parameter_ is not used. A from_param method will not help here 
either, as it must belong to the type object in the argtypes list, 
not the object passed as an argument.
 
Yep sorry, the _as_parameter_ was cruft from some experimentation, it's 
removed now.  The RectProxy is used when rects have negative width or 
height, which is supported by Pygame but not SDL.  There's no nice way 
to handle this conversion, as many SDL functions modify the rectangle 
passed in (e.g., the blit functions).  The onus for normalizing the 
rectangle before grabbing "_r" (the SDL_Rect) is therefore on the caller 
(Pygame), and there are some places I haven't addressed this yet.
20k LYIS now works great on my computer... This game was really 
addictive in the Pyweek comp.  There's a large dump of exceptions when 
it quits, I think this is just the audio thread not shutting down 
correctly (may be a Pygame error, it's on my todo list).
Alex.