首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Pygame与倾斜平台雪碧图的碰撞故障

Pygame与倾斜平台雪碧图的碰撞故障
EN

Stack Overflow用户
提问于 2017-06-30 12:31:17
回答 1查看 81关注 0票数 1

当我在最近的一个平台上工作时,我遇到了一个碰撞问题,这个问题发生在我的游戏中使用的倾斜平台精灵上。我已经尝试在倾斜的精灵上实现了一个碰撞遮罩,希望能抵消这个繁琐的错误。但是当我运行程序的时候,这个抖动的错误发生了,玩家的精灵在倾斜的平台上上下跳跃,如果我像其他平台一样实现这个倾斜的平台精灵,玩家会像它的矩形一样走在精灵上,而实际上它是一个三角形的精灵。我希望上面的文字,如果它没有,我将非常乐意详细阐述,并感谢任何建议:)

我认为错误出现在以下代码段之一。如果你觉得你需要看到更多的代码,我很乐意提供更多。

代码语言:javascript
运行
复制
class Platform(pygame.sprite.Sprite):
    def __init__(self, id, x, y):
        pygame.sprite.Sprite.__init__(self)
        self.tile_images = []
        self.get_images()

        self.id = int(id)
        self.image = self.tile_images[self.id]
        self.rect = self.image.get_rect()
        self.rect.x = x
        self.rect.y = y

        if self.id == 5 or self.id == 4: #4 and 5 are the slanted platform sprites
            self.mask = pygame.mask.from_surface(self.image)

更新我的游戏类的部分。

代码语言:javascript
运行
复制
def update(self):
    self.player_sprite.update()

    if self.player.rect.x <= 0:
        self.player.direction = "R"
        self.player.rect.x = 0

    if self.player.vel.y > 0:
        hits = pygame.sprite.spritecollide(self.player, self.platform_list, False)
        if hits:
            lowest = hits[0]
            for hit in hits:
                if hit.rect.bottom > lowest.rect.bottom:
                    lowest = hit
            if self.player.rect.y < lowest.rect.centery:
                self.player.pos.y = lowest.rect.top + 1
                self.player.vel.y = 0
                self.player.jumped = False

播放器更新区,可能是重力错误?

代码语言:javascript
运行
复制
def update(self):
    self.animate()

    self.acc.x += self.vel.x * PLAYER_FRICTION
    self.vel += self.acc
    if abs(self.vel.x) < 0.1:
        self.vel.x = 0
    self.pos += self.vel + 0.5 * self.acc
    self.rect.midbottom = self.pos
    self.acc = vec(0, PLAYER_GRAV)
EN

回答 1

Stack Overflow用户

发布于 2017-06-30 15:42:33

我对pygame面具不是很熟悉,但我会试一试。

代码语言:javascript
运行
复制
 hits = pygame.sprite.spritecollide(self.player, self.platform_list, False)

使用倾斜平台的掩码测试冲突,但冲突处理代码使用其rect

代码语言:javascript
运行
复制
 self.player.pos.y = lowest.rect.top + 1

抖动来自这里。你的玩家一直到面具,但在冲突处理后被送回rect,这比面具要高。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44838626

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档