Python 基于pygame和平台的碰撞检测

Python 基于pygame和平台的碰撞检测,python,pygame,collision-detection,Python,Pygame,Collision Detection,到目前为止,我有一个非常简单的碰撞检测平台游戏。不幸的是,碰撞检测是如此简单,当我跳到空中的块时,我会卡在它们中间。我也尝试过更复杂的碰撞检测方法。我已经把它注释掉了,因为如果我使用它,我会直接通过平台。我的目标是让我的精灵能够探测平台的所有点。如果我从侧面撞到平台,我希望碰撞将我推开。如果我跳上去,我就不会摔倒。我一直在努力解决这个问题,因为我是一个python noob,有什么帮助吗 class Player(pygame.sprite.Sprite): def __init__(self,

到目前为止,我有一个非常简单的碰撞检测平台游戏。不幸的是,碰撞检测是如此简单,当我跳到空中的块时,我会卡在它们中间。我也尝试过更复杂的碰撞检测方法。我已经把它注释掉了,因为如果我使用它,我会直接通过平台。我的目标是让我的精灵能够探测平台的所有点。如果我从侧面撞到平台,我希望碰撞将我推开。如果我跳上去,我就不会摔倒。我一直在努力解决这个问题,因为我是一个python noob,有什么帮助吗

class Player(pygame.sprite.Sprite):
def __init__(self,x,y,width = 65, height = 35):
    pygame.sprite.Sprite.__init__(self)
    self.x = x
    self.y = y
    self.hspeed,self.vspeed = 0,0

    self.images=[]
    r0 = pygame.image.load("Images\Player\i1.png")
    r1 = pygame.image.load("Images\Player\i2.png")
    r2 = pygame.image.load("Images\Player\i3.png")
    r3 = pygame.image.load("Images\Player\i4.png")
    self.hurt = pygame.image.load("Images\Player\Hurt.png")
    self.images.append(r0)
    self.images.append(r1)
    self.images.append(r2)
    self.images.append(r3)

    self.rotatedimages = []
    rr0 = pygame.transform.flip(r0 ,True, False)
    rr1 = pygame.transform.flip(r1 ,True, False)
    rr2 = pygame.transform.flip(r2 ,True, False)
    rr3 = pygame.transform.flip(r3 ,True, False)
    self.rotatedimages.append(rr0)
    self.rotatedimages.append(rr1)
    self.rotatedimages.append(rr2)
    self.rotatedimages.append(rr3)

    self.gravity = 0.25
    self.index = 0
    self.image = self.images[self.index]
    self.rect = pygame.Rect(self.x,self.y,width,height)

    self.TimeNum=0
    self.TimeTarget=10
    self.Timer = 0
    self.collision = False


    def Level1PlatColl(self, BlockListGrass, TrapList, enemygroup, PowerUps):
    PlatformCollision = pygame.sprite.spritecollide(self, BlockListGrass, False )
    #for each_object in PlatformCollision:
        #if self.vspeed > 0:
            #self.rect.bottom = each_object.rect.top

        #if self.vspeed < 0:
            #self.rect.top = each_object.rect.bottom
        #self.vspeed = 0

    if PlatformCollision:
        self.vspeed = 0

    if not PlatformCollision:
        self.vspeed -= self.gravity
    self.rect.y -= self.vspeed




    def Jump(self):
    key = pygame.key.get_pressed()

    if key[pygame.K_UP]:
        self.vspeed = 8
        self.rect.y -= self.vspeed
职业玩家(pygame.sprite.sprite):
定义初始值(self,x,y,宽度=65,高度=35):
pygame.sprite.sprite.\uuuuu init\uuuuuuu(自我)
self.x=x
self.y=y
self.hspeed,self.vspeed=0,0
self.images=[]
r0=pygame.image.load(“Images\Player\i1.png”)
r1=pygame.image.load(“Images\Player\i2.png”)
r2=pygame.image.load(“Images\Player\i3.png”)
r3=pygame.image.load(“Images\Player\i4.png”)
self.hurt=pygame.image.load(“Images\Player\hurt.png”)
self.images.append(r0)
self.images.append(r1)
self.images.append(r2)
self.images.append(r3)
self.rotateImage=[]
rr0=pygame.transform.flip(r0,真,假)
rr1=pygame.transform.flip(r1,真,假)
rr2=pygame.transform.flip(r2,真,假)
rr3=pygame.transform.flip(r3,真,假)
self.rotateImage.append(rr0)
self.rotateImage.append(rr1)
self.rotateImage.append(rr2)
self.rotateImage.append(rr3)
自重=0.25
self.index=0
self.image=self.images[self.index]
self.rect=pygame.rect(self.x、self.y、宽度、高度)
self.TimeNum=0
self.TimeTarget=10
自动定时器=0
self.collision=False
def Level1PlatColl(自我、BlockListGrass、TrapList、enemygroup、通电):
PlatformCollion=pygame.sprite.spritecollide(self,BlockListGrass,False)
#对于平台碰撞中的每个_对象:
#如果self.vspeed>0:
#self.rect.bottom=每个_object.rect.top
#如果self.vspeed<0:
#self.rect.top=每个_object.rect.bottom
#self.vspeed=0
如果平台冲突:
self.vspeed=0
如果不是平台冲突:
自速度-=自重力
self.rect.y-=self.vspeed
def跳转(自):
key=pygame.key.get_pressed()
如果键[pygame.K_UP]:
self.vspeed=8
self.rect.y-=self.vspeed

您的代码看起来不错。在
Level1PlatColl
中你有更多的东西吗?是的,基本上只是检测与敌人和其他精灵othan的碰撞,而不是平台