JohannesLks / AwesomeGame

https://awesome-game-ten.vercel.app
MIT License
4 stars 0 forks source link

Sollten wir einen Wall Sprite einbauen? #54

Open JohannesLks opened 11 months ago

JohannesLks commented 11 months ago

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)