微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Pygame - 平台两侧的碰撞

如何解决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 举报,一经查实,本站将立刻删除。