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

问题描述

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

    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),10))
    platform4 = ZRect((800,900),10))
    platform5 = ZRect((500,850),10))
    platform6 = ZRect((250,500),10))
    platform7 = ZRect((0,300),10))
    platform8 = ZRect((800,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))
        screen.draw.filled_rect(platform3,255))
        screen.draw.filled_rect(platform4,255))
        screen.draw.filled_rect(platform5,255))
        screen.draw.filled_rect(platform6,255))
        screen.draw.filled_rect(platform7,255))
        screen.draw.filled_rect(platform8,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()

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)