Pygame - 平台两侧的碰撞

时间:2020-12-31 16:46:56

标签: python pygame collision

我目前正在尝试在 pygame 上制作自己的平台游戏。我已经对平台顶部和底部的碰撞进行了编码,这样玩家只有在掉到平台上时才能跳到平台顶部。但是,如果玩家走进平台的一侧,他会在平台上啪啪作响。我怎样才能让平台的侧面作为边界? 这是我在主游戏循环中的更新部分:

def update(self):
    self.all_sprites.update() 
    hits = p.sprite.spritecollide(self.player, self.platforms, False) 
    if self.player.vel.y > 0: 
        if hits: 
            self.player.rect.bottom = hits[0].rect.top + 1 
            self.player.pos = self.player.rect.midbottom 
            self.player.vel.y = 0 
    if self.player.vel.y < 0: 
        if hits: 
            self.player.rect.top = hits[0].rect.bottom 
            self.player.pos = self.player.rect.midbottom 
            self.player.vel.y = 0 

我试过用这个,但没用:

if self.player.vel.x > 0:
    if hits:
        self.player.rect.right = hits[0].rect.left
        self.player.pos = self.player.rect.midleft
        self.player.vel.x = 0
if self.player.vel.x < 0:
    if hits:
        self.player.rect.left = hits[0].rect.right
        self.player.pos = self.player.rect.midright
        self.player.vel.x = 0

这是我的播放器类:

vec = p.math.Vector2 

class Player(p.sprite.Sprite): 
    def __init__(self, game):
        p.sprite.Sprite.__init__(self) 
        self.game = game 
        self.image = p.Surface((p_width, p_height)) 
        self.image.fill(p_colour) 
        self.rect = self.image.get_rect() 
        self.rect.center = (0, height - 30) 
        self.pos = vec(0, height - 30) 
        self.vel = vec(0, 0) 
        self.acc = vec(0, 0)

    def jump(self): 
       
        self.rect.y += 1 
        hits = p.sprite.spritecollide(self, self.game.platforms, False) 
        self.rect.y -= 1 
        if hits: 
            self.vel.y = p_jump 
    def update(self): 
        self.acc = vec(0, p_grav) 

        keys = p.key.get_pressed() 

        if keys[p.K_LEFT]: 
            self.acc.x = -p_acc 
        if keys[p.K_RIGHT]: 
            self.acc.x = p_acc 

        self.acc.x += self.vel.x * p_friction 

        self.vel += self.acc 
        self.pos += self.vel + 0.5 * self.acc 

        if self.rect.right > width - 1: 
            self.rect.right = width - 1 
            self.pos = self.rect.midbottom 
        if self.rect.left < 1: 
            self.rect.left = 1 
            self.pos = self.rect.midbottom 
        self.rect.midbottom = self.pos 

感谢任何帮助。我尽量保持代码最少

0 个答案:

没有答案