当我在最近的一个平台上工作时,我遇到了一个碰撞问题,这个问题发生在我的游戏中使用的倾斜平台精灵上。我已经尝试在倾斜的精灵上实现了一个碰撞遮罩,希望能抵消这个繁琐的错误。但是当我运行程序的时候,这个抖动的错误发生了,玩家的精灵在倾斜的平台上上下跳跃,如果我像其他平台一样实现这个倾斜的平台精灵,玩家会像它的矩形一样走在精灵上,而实际上它是一个三角形的精灵。我希望上面的文字,如果它没有,我将非常乐意详细阐述,并感谢任何建议:)
我认为错误出现在以下代码段之一。如果你觉得你需要看到更多的代码,我很乐意提供更多。
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)更新我的游戏类的部分。
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播放器更新区,可能是重力错误?
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)发布于 2017-06-30 15:42:33
我对pygame面具不是很熟悉,但我会试一试。
hits = pygame.sprite.spritecollide(self.player, self.platform_list, False)使用倾斜平台的掩码测试冲突,但冲突处理代码使用其rect:
self.player.pos.y = lowest.rect.top + 1抖动来自这里。你的玩家一直到面具,但在冲突处理后被送回rect,这比面具要高。
https://stackoverflow.com/questions/44838626
复制相似问题