So I am making a zombie shooter game in pygame. I have a player - a zombie list - and a bullets list. all of them are rectangles.
I need to detect the collision between all the bullets and all zombies. - i tried开发者_运维知识库 colliderect
but and collidelist
but that is between a object and a list. I want a list and another list.
when i try doing:
def collide(self):
for zombie in self.zombies:
index = self.zombie.collidelist(self.bullets)
if index:
print("hit")
in zombie class it gives error TypeError: Argument must be a sequence of rectstyle objects.
https://github.com/tejasnarula/zombie-shooter
There is no function that can directly test for collisions between 2 lists of rectangles in pygame, unless you are using pygame.sprite.Group
and pygame.sprite.groupcollide
. If you have 2 pygame.sprite.Group
objects (group1
and group2
) you can do the following:
if pygame.sprite.groupcollide(group1, group2, True, True):
print("hit")
If you have to lists of pygame.Rect
objects (rect_list1
and rect_list2
) you can use collidelist()
or collidelistall()
in a loop. e.g.:
for rect1 in rect_list1:
index = rect1.collidelist(rect_list2)
if index >= 0:
print("hit")
for rect1 in rect_list1:
collide_list = rect1.collidelistall(rect_list2)
if collide_list:
print("hit")
If you don't have pygame.Rect
objects, you need to create them and run the collision test in nested loops:
for zombie in self.zombies:
zombieRect = pygame.Rect(zombie.x, zombie.y, zombie.width, zombie.height)
for bullet in self.bullets:
bulletRect = pygame.Rect(bullet.x, bullet.y, bullet.width, bullet.height)
if zombieRect.colliderect(bulletRect):
print("hit")
精彩评论