如何让我的播放器与平台的两侧和底部发生碰撞

时间:2021-07-26 02:01:21

标签: python collision-detection pgzero

我正在尝试制作具有许多平台级别的游戏。我想知道如何对所有角度进行碰撞检测。在我的代码中,当我在平台的两侧发生碰撞时,它会让我的玩家进入平台,但我希望它不会产生这种效果并使其无法通过它。此外,当我与平台底部相撞时,我的角色会通过它而不是碰撞。 这是我的完整代码:

    import pgzrun
    import time
    z = 0
    x = 0
    HEIGHT = 10000
    WIDTH = 1000
    Height = 700
    Width = 700
    xspeed = 3
    yspeed = 3
    x = 10
    y = 10
    x_change = 0
    y_change = 0
    old_x = x
    old_y = y
    fps = (30)
    platforms = []
    score = 0
    gravity = 5
    platform1 = ZRect((0, 1100),(200, 10))
    platform2 = ZRect((400, 1050),(50, 10))
    platform3 = ZRect((600, 1000),(50, 10))
    platform4 = ZRect((800, 900),(200, 10))
    platform5 = ZRect((500, 850),(200, 10))
    platform6 = ZRect((250, 500),(200, 10))
    platform7 = ZRect((0, 300),(200, 10))
    platform8 = ZRect((800, 200),(200, 10))
    alien = Actor("alien")
    diamond = Actor("diamond_s")
    alien.y = 400
    alien.yspeed = 0
    diamond.x = 900
    diamond.y = 150
    def draw():
        screen.draw.filled_rect(platform1, (255, 255, 255))
        screen.draw.filled_rect(platform2, (255, 255, 255))
        screen.draw.filled_rect(platform3, (255, 255, 255))
        screen.draw.filled_rect(platform4, (255, 255, 255))
        screen.draw.filled_rect(platform5, (255, 255, 255))
        screen.draw.filled_rect(platform6, (255, 255, 255))
        screen.draw.filled_rect(platform7, (255, 255, 255))
        screen.draw.filled_rect(platform8, (255, 255, 255))
        alien.draw()
        diamond.draw()
        if z == 1:
            screen.draw.text("You Win", (400, 100), fontsize = 100)
    def update():
        if platform5.y > 550:
            platform5.y -= 1
        if platform5.y == 550:
            for i in range(300):
                platform5.y += 1
        if platform7.x < 498:
            platform7.x += 3
        if platform7.x == 498:
            for i in range(498):
                platform7.x -= 1
        if alien.top <= 1500:
            global xspeed, yspeed, Width, Height, score, gravity, z
            if alien.colliderect(platform1):
                alien.yspeed = 0
                collide = True
                alien.isJump = False
                gravity = 1
                alien.bottom = platform1.top - 0
                if (platform1.collidepoint(alien.right, alien.bottom) or platform1.rect.collidepoint(alien.left, alien.bottom)):
                    alien.moveright = True
                    alien.moveleft = True
                if (platform1.collidepoint(alien.right, alien.top) or platform1.collidepoint(alien.right, alien.bottom - 0.0001)):
                    alien.moveright = False
                elif (platform1.collidepoint(alien.left, alien.top) or platform1.collidepoint(alien.left, alien.bottom - 0.0001)):
                    alien.moveleft = False
                if keyboard.up:
                    alien.yspeed = -30
                    alien.y += alien.yspeed
            if alien.colliderect(platform2):
                alien.yspeed = 0
                collide = True
                alien.isJump = False
                gravity = 1
                alien.bottom = platform2.top + 1
                if (platform2.collidepoint(alien.right, alien.bottom) or platform2.rect.collidepoint(alien.left, alien.bottom)):
                    alien.moveright = True
                    alien.moveleft = True
                if (platform2.collidepoint(alien.right, alien.top) or platform2.collidepoint(alien.right, alien.bottom - 0.0001)):
                    alien.moveright = False
                elif (platform2.collidepoint(alien.left, alien.top) or platform2.collidepoint(alien.left, alien.bottom - 0.0001)):
                    alien.moveleft = False
                if keyboard.up:
                    alien.yspeed = -30
                    alien.y += alien.yspeed
            if alien.colliderect(platform3):
                alien.yspeed = 0
                collide = True
                alien.isJump = False
                gravity = 1
                alien.bottom = platform3.top + 1
                if (platform3.collidepoint(alien.right, alien.bottom) or platform3.rect.collidepoint(alien.left, alien.bottom)):
                    alien.moveright = True
                    alien.moveleft = True
                if (platform3.collidepoint(alien.right, alien.top) or platform3.collidepoint(alien.right, alien.bottom - 0.0001)):
                    alien.moveleft = False
                elif (platform3.collidepoint(alien.left, alien.top) or platform3.collidepoint(alien.left, alien.bottom - 0.0001)):
                    alien.moveright = False
                if keyboard.up:
                    alien.yspeed = -30
                    alien.y += alien.yspeed
            if alien.colliderect(platform4):
                alien.yspeed = 0
                collide = True
                alien.isJump = False
                gravity = 1
                alien.bottom = platform4.top + 1
                if (platform4.collidepoint(alien.right, alien.bottom) or platform4.rect.collidepoint(alien.left, alien.bottom)):
                    alien.moveright = True
                    alien.moveleft = True
                if (platform4.collidepoint(alien.right, alien.top) or platform4.collidepoint(alien.right, alien.bottom - 0.0001)):
                    alien.moveright = False
                elif (platform4.collidepoint(alien.left, alien.top) or platform4.collidepoint(alien.left, alien.bottom - 0.0001)):
                    alien.moveleft = False
                if keyboard.up:
                    alien.yspeed = -30
                    alien.y += alien.yspeed
            if alien.colliderect(platform5):
                alien.yspeed = 0
                collide = True
                alien.isJump = False
                gravity = 1
                alien.bottom = platform5.top + 1
                if (platform5.collidepoint(alien.right, alien.bottom) or platform5.rect.collidepoint(alien.left, alien.bottom)):
                    alien.moveright = True
                    alien.moveleft = True
                if (platform5.collidepoint(alien.right, alien.top) or platform5.collidepoint(alien.right, alien.bottom - 0.0001)):
                    alien.moveright = False
                elif (platform5.collidepoint(alien.left, alien.top) or platform5.collidepoint(alien.left, alien.bottom - 0.0001)):
                    alien.moveleft = False
                if keyboard.up:
                    alien.yspeed = -30
                    alien.y += alien.yspeed
            if alien.colliderect(platform6):
                alien.yspeed = 0
                collide = True
                alien.isJump = False
                gravity = 1
                alien.bottom = platform6.top + 1
                if (platform6.collidepoint(alien.right, alien.bottom) or platform6.rect.collidepoint(alien.left, alien.bottom)):
                    alien.moveright = True
                    alien.moveleft = True
                if (platform6.collidepoint(alien.right, alien.top) or platform6.collidepoint(alien.right, alien.bottom - 0.0001)):
                    alien.moveright = False
                elif (platform6.collidepoint(alien.left, alien.top) or platform6.collidepoint(alien.left, alien.bottom - 0.0001)):
                    alien.moveleft = False
                if keyboard.up:
                    alien.yspeed = -30
                    alien.y += alien.yspeed
            if alien.colliderect(platform7):
                alien.yspeed = 0
                collide = True
                alien.isJump = False
                gravity = 1
                alien.bottom = platform7.top + 1
                if (platform7.collidepoint(alien.right, alien.bottom) or platform7.rect.collidepoint(alien.left, alien.bottom)):
                    alien.moveright = True
                    alien.moveleft = True
                if (platform7.collidepoint(alien.right, alien.top) or platform7.collidepoint(alien.right, alien.bottom - 0.0001)):
                    alien.moveright = False
                elif (platform7.collidepoint(alien.left, alien.top) or platform7.collidepoint(alien.left, alien.bottom - 0.0001)):
                    alien.moveleft = False
                if keyboard.up:
                    alien.yspeed = -30
                    alien.y += alien.yspeed
            if alien.colliderect(platform8):
                alien.yspeed = 0
                collide = True
                alien.isJump = False
                gravity = 1
                alien.bottom = platform8.top + 1
                if (platform8.collidepoint(alien.right, alien.bottom) or platform8.rect.collidepoint(alien.left, alien.bottom)):
                    alien.moveright = True
                    alien.moveleft = True
                if (platform8.collidepoint(alien.right, alien.top) or platform8.collidepoint(alien.right, alien.bottom - 0.0001)):
                    alien.moveright = False
                elif (platform8.collidepoint(alien.left, alien.top) or platform8.collidepoint(alien.left, alien.bottom - 0.0001)):
                    alien.moveleft = False
                if keyboard.up:
                    alien.yspeed = -30
                    alien.y += alien.yspeed
            else:
                alien.moveright = True
                alien.moveleft = True
            gravity = 2
            alien.yspeed += gravity
            alien.y += alien.yspeed
            score += 1
            if keyboard.left:
                alien.x -= 10
            if keyboard.right:
                alien.x -= -10
        if alien.colliderect(diamond) == True:
            z = z + 1
            diamond.x = 100000
            diamond.y = 100000
            screen.draw.text("You Win", (0, 0))
            print(z)
        if alien.top >= 1500:
            alien.y = 400
            alien.x = 0
        screen.clear()
        screen.clear()
    pgzrun.go()

0 个答案:

没有答案