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

Re: [pygame] Re: Hexagonal collision detection?



Ouch...a bug(!!!):

This lines:
>  x = pos[0].rect.w
>  y = pos[1].rect.h
Should be:
>  x = pos[0] - rect.w
>  y = pos[1] - rect.h


2009/9/15 John Eriksson <john@xxxxxxxxxxxx>:
> Code without comments:
>
> if rect.collidepoint(pos):
>  x = pos[0].rect.w
>  y = pos[1].rect.h
>  c = tuple(img.get_at((x,y))
>  if c[3] > 0:
>     return True
> return False
>
> /John
>
> 2009/9/15 John Eriksson <john@xxxxxxxxxxxx>:
>> Hi,
>>
>> I allways use the alpha value of an button image to accomplish this.
>>
>> # img is the image of the hex button with an transparent background.
>> # rect is the img rectangle positioned at the spot where the button is drawn.
>> # pos is the position to check for.
>>
>> if rect.collidepoint(pos):             # First of all, check if we are
>> inside the button image
>>   x = pos[0].rect.w                   # Translate the location to a
>> local location within the image.
>>   y = pos[1].rect.h
>>   c = tuple(img.get_at((x,y))     # Get the color for that pixel
>> (this works for both pygame 1.9 and older)
>>   if c[3] > 0:                            # Did we click on a none
>> transparent pixel, Then we have clicked on the image.
>>      return True
>> return False
>>
>> My five cents
>> /John Eriksson (wmjoers)
>>
>>
>> 2009/9/15 René Dudfield <renesd@xxxxxxxxx>:
>>> On Tue, Sep 15, 2009 at 12:05 PM, rygoody <rygoody@xxxxxxxxx> wrote:
>>>> Where do I get at this polygonal collision detection? I cannot find it
>>>> in the pygame docs.
>>>
>>> It doesn't come with pygame, you'd need to search for it.  Here's a
>>> page here about it:
>>>    http://local.wasp.uwa.edu.au/~pbourke/geometry/insidepoly/
>>>
>>>
>>> The color method is probably best - that way you can do collision with
>>> any shape at all.
>>>
>>>
>>>>
>>>> On Sep 15, 3:30 am, René Dudfield <ren...@xxxxxxxxx> wrote:
>>>>> You could use polygon collision detection.
>>>>>
>>>>> Also you could draw your hex each with a different color, and use that
>>>>> as a collision surface.  For example, you drew your 1st hex as color
>>>>> (0,0,1,255) then your 2nd as (0,0,2,255) etc.  That would probably be
>>>>> fastest, as it's just a lookup table - pretty easy too.
>>>>>
>>>>> cheers,
>>>>>
>>>>>
>>>
>>
>