[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

Re: [pygame] sprite collisions - looking for simple snippet



well, the exact answer i can say is 'yes and no'... ;)

the 'yes' is finally i can start understanding how collisions works on
pygame, and this is truly wonderful! thank you!

the 'no' is, when i did use 'if' over coordinates and size
calculations instead of collisions - http://pastebin.com/f38dfd442 -
it also shown just one sprite instead of from 'amnt' variable (i used
to try between 32 and 128), and performed hugelly slow as well... -
this is concerning me when i had some ideas on coding games with some
complexity on sprite ammounts (like doing some danmaku experimental
stuff or something in this way...)

for me were a surprise why both http://pastebin.com/m1e1c7c94 and
http://pastebin.com/f38dfd442 shown only one sprite - very weird...

overally, your correction will help me coding simpler snippets

thanks! :)   (and thanks also confirming subsurfaces are fine for
collisions - i'm still very newbie on Pygame! :) )



On 7/13/09, Zack Schilling <zack.schilling@xxxxxxxxx> wrote:
> Well, this version runs. I'm not sure if it's doing what you want but
> it does make a windows and draws some stuff. The subsurface splits are
> correct. I tried to make minimal corrections.
>
> http://pastebin.com/m1e1c7c94
>
> -Zack
>
> On Jul 13, 2009, at 11:47 AM, Paulo Silva wrote:
>
>> @Zack - what i wanted were change the background colour to #FF0000
>> only when the sprites 0 and 1 collides - anyway, sorry this code is
>> not PEP8, and using abbreviated variable names - i came from hobbystic
>> 80's ansi-basic , where i were hugelly one-liner, and variable names
>> only took 1 or 2 characters that time - i have deep bad habits from
>> that time, and learning PEP8 is still a huge barrier for me - be
>> welcome on breaking lines at ';' or rewriting variable names, if you
>> want...
>>
>> @Henrique, if you can help fixing http://pastebin.com/f524a8cf2 would
>> be great - i understand what you were saying from the error message,
>> but i don't have any idea about the solution for that... - what i
>> coded there were the closest i could imagine as possible for having
>> that working... - i even tried to avoid all default sprite collision
>> methods from pygame, and only using position and size calculations for
>> collisions (outside of any def or class - i'm trying to avoid them on
>> snippets like this), but the code became hugelly slow....
>>
>> thank you all!
>>
>>
>> On 7/13/09, Henrique Nakashima <henrique.nakashima@xxxxxxxxx> wrote:
>>> Traceback (most recent call last):
>>>  File "col.py", line 52, in <module>
>>>    collide=pygame.sprite.collide_rect(sprid[0],sprid[1])
>>>  File "C:\Python25\lib\site-packages\pygame\sprite.py", line 1146, in
>>> collide_r
>>> ect
>>>    return left.rect.colliderect(right.rect)
>>> AttributeError: 'pygame.Surface' object has no attribute 'rect'
>>>
>>> This error happens because you are passing Surfaces to
>>> pygame.sprite.collide_rect, not Sprites.
>>>
>>> On Mon, Jul 13, 2009 at 12:27, Zack Schilling
>>> <zack.schilling@xxxxxxxxx>wrote:
>>>
>>>> I tried to read and correct your code, but I have no idea at all
>>>> what's
>>>> going on. It's written like C++ transposed directly into python,
>>>> which is
>>>> confusing. It doesn't help that there are no comments at all and the
>>>> variable names are cryptic. A big problem seems to be simply
>>>> feeding wrong
>>>> object types to all the functions. You're sending sprites to
>>>> blitters and
>>>> rects to the sprite collide.
>>>>
>>>> I'll have a go at understanding what you want to do and making it
>>>> work,
>>>> but
>>>> I make no promises. If I can get that far, I'll also rewrite it in
>>>> a much
>>>> more pythonic way. Then you can compare the two and learn much
>>>> better
>>>> practices when working in python.
>>>>
>>>> -Zack
>>>>
>>>>
>>>> On Jul 13, 2009, at 8:03 AM, Paulo Silva wrote:
>>>>
>>>> hi!
>>>>>
>>>>> well, for me finding a good pygame snippet with sprite collision
>>>>> (and
>>>>> simple to understand) is like finding a needle in a haystack...
>>>>>
>>>>> but when i try do on my own, i get this:
>>>>>
>>>>> Traceback (most recent call last):
>>>>> File "_spritesheetexample15b4_difsiz_collision.py", line 47, in
>>>>> <module>
>>>>> collide=pygame.sprite.collide_rect(spridr[0].rect,spridr[1].rect)
>>>>> AttributeError: 'pygame.Rect' object has no attribute 'rect'
>>>>>
>>>>> the example is: http://pastebin.com/f524a8cf2
>>>>>
>>>>> all suggestions are welcome! (be welcome also fixing that pastebin,
>>>>> and sending us the pastebin url with the fixes! ;) ) - sorry it's
>>>>> not
>>>>> PEP8 yet... :/
>>>>>
>>>>> thanks! ;)
>>>>>
>>>>>
>>>>>
>>>>> On 7/13/09, René Dudfield <renesd@xxxxxxxxx> wrote:
>>>>>
>>>>>> On Mon, Jul 13, 2009 at 7:32 AM, Paulo Silva <nitrofurano@xxxxxxxxx
>>>>>> >
>>>>>> wrote:
>>>>>>
>>>>>> this reference i know from a long time, and figured out easily
>>>>>> there
>>>>>>> were the exact methods to be used - the problem is i couldn't
>>>>>>> have a
>>>>>>> snippet working only following that - on my oppinion on that
>>>>>>> referenence, each pygame method should have a working snippet
>>>>>>> to be
>>>>>>> tried out - for me is easier to work on tiny snippets, just
>>>>>>> like with
>>>>>>> lego bricks
>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
>>>>>> Hi,
>>>>>>
>>>>>> pygame comes with examples.  Either use those, or use the code
>>>>>> search
>>>>>> button
>>>>>> next to each method, to search through all the projects on the
>>>>>> internet
>>>>>> that
>>>>>> use pygame.  There's 238 results for spritcollide for example.
>>>>>>
>>>>>>
>>>>>> cu,
>>>>>>
>>>>>>
>>>>
>>>
>
>