Problems with collision response

Steven D'Aprano steve at REMOVE-THIS-cybersource.com.au
Sun Jan 17 23:16:12 CET 2010


On Sun, 17 Jan 2010 06:14:59 -0800, Joabos wrote:

> I'm doing a project, and I need to insert collision detection and
> response on it. Here's the code. What am I doing wrong?
> 
> 
>    #Update all sprites, map
>         self.player.update(dt)
>         
>         #Collide other sprites
>         collisions = rabbyt.collisions.aabb_collide_single(self.player,
> self.spriteList)
>         
>         for col in collisions:
>             pass

Why are you looping over the collisions but do nothing?


[...]
>        if len(collisions) > 0:
>             #Collide the sprite with the bounding line pass

You have turned a great chunk of code into a string with triple quotes. 
That essentially is equivalent to commenting it out: it will not be 
executed. Then you did it again to a second chunk of code.

Removing all the code that doesn't do anything, you have FIVE lines left:


self.player.update(dt)
collisions = rabbyt.collisions.aabb_collide_single(self.player,
  self.spriteList)
collisions = rabbyt.collisions.aabb_collide_single(self.player,
  self.map_manager.map_sprites())
for tile in collisions:
    self.player.collide(tile)


Notice that you generate collisions between the player and the sprite, do 
absolutely nothing with it, and immediately replace it with collisions 
between the player and the map.

Since you reported that there are no collisions between the player and 
the map, you need to check these three things:


(1) does player.collide actually do anything?

(2) does map_manager.map_sprites return the map sprites you expect?

(3) does rabbyt.collisions.aabb_collide_single detect the collisions?




-- 
Steven



More information about the Python-list mailing list