2015-03-07 4 views
0

этого класса Sprite:Pygame: Использование colliderect в классах

class Minion(pygame.sprite.Sprite): 


    def __init__(self, x, y): 

     pygame.sprite.Sprite.__init__(self) 
     self.color = tuple([random.randrange(0, 256), random.randrange(0, 256), random.randrange(0, 256)]) 
     self.x = x 
     self.y = y 
     self.minion = pygame.Rect(self.x, self.y, 15, 25) 
     pygame.draw.rect(SCREEN, self.color, (self.x, self.y, 15, 25)) 

Это код используется для игр защиты башни. Теперь, если вам нужно знать, столкнулся ли один миньон с другим, используя функцию типа коллайдера для объекта Rect каждого миньона, как бы я это сделал?

Также, если был еще один класс, который выстрелил в пули (объекты Rect), как бы я обнаружил столкновение между ними и миньоном?

Справка будет принята с благодарностью. Спасибо.

ответ

0

Вы могли бы знать, что каждый спрайт состоит из image (который рисуется на поверхности) и rect объект (задает расположение и размер (!) Изображений).

Добавить объект rect для вашего спрайта в ваш метод __init__. Это очень просто, потому что метод pygame.draw.anyObject() всегда возвращает rect экземпляр, который представляет положение и размер нарисованного объекта:

self.collideRect = pygame.draw.rect(SCREEN, self.color, (self.x, self.y, 15, 25)) 

Поэтому вам не нужна строка self.minion = pygame.Rect(self.x, self.y, 15, 25).

Чтобы проверить один миньон (т.е. rect объекта) сталкивается с другим миньоном, вы могли бы сделать что-то подобное в вашем основном цикле игры:

if minion1.collideRect.colliderect(minion2.collideRect) == True: 
    pass #do something 

Если у вас есть более чем одного объекта (например, миньоны или пули в списке под названием objList) вместо этого вы можете использовать метод .collidelist(). Этот метод возвращает индекс обнаруженного первого столкновения. Если не было обнаружено коллизий -1:

colIndex = minion1.collideRect.collidelist([obj.collideRect for obj in objList]) 
#do something with the object in objList[colIndex] 
Смежные вопросы