Pygame - 平台两侧的碰撞

问题描述

我目前正在尝试在 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 

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

解决方法

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

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

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