Я делаю игру в пигме. Моя главная проблема заключается в том, как реализовать столкновение пигмеев в одном классе. У меня есть много обнаружений столкновений в моей игре, могу ли я сделать их меньше в одном классе или что-то в этом роде. Есть также некоторые групповые столкновения.
Также оптимизирует многие эффекты столкновений в играх (не та игра, о которой я говорю в играх 3A).
def update(self):
self.all_sprites.update()
self.score += self.start_time
collision = pygame.sprite.spritecollide(self.player, self.platforms, False)
collideGroup = pygame.sprite.groupcollide(self.bullet_list, self.enemyRocket, True, True)
collideGroupPlat = pygame.sprite.groupcollide(self.bullet_list, self.platforms, True, False)
collide = pygame.sprite.spritecollide(self.player, self.enemyRocket, False)
collideWithEND = pygame.sprite.spritecollide(self.player, self.endLevel, False)
collideWithFuel = pygame.sprite.groupcollide(self.bullet_list, self.fuel, True, True)
if collision:
self.player_health -= 1
self.new()
if collide:
self.player_health -= 1
self.new()
if collideGroup:
self.score += 10
if collideWithEND:
self.level += 1
if collideWithFuel:
self.fuelBar += 10
Должен ли я добавить в классы спрайтов некоторые функции для обнаружения коллизий или я должен открыть другой класс для коллизий.
Вот мои уроки злости.
class Player(pygame.sprite.Sprite):
def __init__(self, img, pos_x, pos_y):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.image.load(os.path.join('images', img)).convert()
self.image.convert_alpha()
self.image.set_colorkey(ALPHA)
self.rect = self.image.get_rect()
self.rect.center = (pos_x, pos_y)
self.vx = 0
self.vy = 0
def update(self):
self.vx = 0
self.vy = 0
keys = pygame.key.get_pressed()
if keys[pygame.K_UP]:
self.vy = -5
if self.rect.y < 0:
self.rect.y += 5
if keys[pygame.K_DOWN]:
self.vy = 3
if keys[pygame.K_RIGHT]:
self.vx = 3
if self.rect.x > (WIDTH-58):
self.rect.x -= 5
if keys[pygame.K_LEFT]:
self.vx = -5
if self.rect.x < 0:
self.rect.x += 5
self.rect.x += self.vx
self.rect.y += self.vy
class Bullet(pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.Surface((5, 3))
self.image.fill(YELLOW)
self.rect = self.image.get_rect()
self.vx = 0
def update(self):
keys = pygame.key.get_pressed()
self.rect.x += self.vx
if self.rect.x > WIDTH:
self.kill()
if keys[pygame.K_SPACE]:
self.vx = 2
self.rect.x += self.vx