Im Moment zerstören sich Sprites, wenn sie den Rand des Bildschirms erreichen. Professioneller wären Wall Sprites, allerdings wäre es ein unnötiger Mehraufwand.
Eine sinnvolle idee wäre es aber möglicherweise den Blocker als Wall zu betrachten und auch dafür ein Collider Pattern zu implementieren.
class Collider():
def collide_with_wall(self, sprite1: Sprite, spritegroup):
sprite1.rect.x = sprite1.pos.x
for sprite2 in spritegroup:
self.collide_with_wall_dir("x", sprite1, sprite2)
sprite1.rect.y = sprite1.pos.y
for sprite2 in spritegroup:
self.collide_with_wall_dir("y", sprite1, sprite2)
def collide_with_wall_dir(self, dir, sprite1, sprite2):
if dir == "x":
if sprite1.rect.colliderect(sprite2.rect):
if isinstance(sprite2, Wall):
if sprite1.vel.x >= 0:
sprite1.pos.x = sprite2.rect.left - sprite1.rect.width
if sprite1.vel.x <= 0:
sprite1.pos.x = sprite2.rect.right
sprite1.vel.x = 0
# sprite1.acc.x = 0
sprite1.rect.x = sprite1.pos.x
if dir == "y":
if sprite1.rect.colliderect(sprite2.rect):
if isinstance(sprite2, Wall):
if sprite1.vel.y >= 0:
sprite1.pos.y = sprite2.rect.top - sprite1.rect.height
if sprite1.vel.y <= 0:
sprite1.pos.y = sprite2.rect.bottom
sprite1.vel.y = 0
# sprite1.acc.y = 0
sprite1.rect.y = sprite1.pos.y
sprites = []
sprites.append(Wall(WHITE, WIDTH / 2 + 100, HEIGHT / 2))
sprites.append(Wall(WHITE, 50, 50))
sprites.append(Wall(WHITE, WIDTH - 140, HEIGHT - 140))
sprites.append(Wall(WHITE, WIDTH - 210, HEIGHT - 210))
player = Player(GREEN, WIDTH / 2, HEIGHT / 2)
sprites.append(player)
Im Moment zerstören sich Sprites, wenn sie den Rand des Bildschirms erreichen. Professioneller wären Wall Sprites, allerdings wäre es ein unnötiger Mehraufwand. Eine sinnvolle idee wäre es aber möglicherweise den Blocker als Wall zu betrachten und auch dafür ein Collider Pattern zu implementieren.