如何对不可迭代平台进行碰撞?
How to make collision to not iterable platform?
Player
有能力站在可迭代平台上,但他不能站在不可迭代平台上——Platform4
。如何解决这个问题?
class Player(pygame.sprite.Sprite):
def __init__(self):
super().__init__()
pygame.sprite.Sprite.__init__(self)
# [...]
def update(self):
hits_4 = pygame.sprite.spritecollide(player, platform4, False)
if hits_4:
self.pos.y = hits_4[0].rect.top + 1
self.vel.y = 0
class Platform4(pygame.sprite.Sprite):
def __init__(self):
super().__init__()
self.image = platform_images4
self.image.set_colorkey(WHITE1)
self.rect = self.image.get_rect()
self.rect.centerx = 300
self.rect.centery = 500
def update(self):
self.rect.move_ip(-1, 0)
if self.rect.right <= 0:
self.kill()
platform4 = Platform4()
all_sprites = pygame.sprite.Group()
all_sprites.add(player, fire, platform4)
platform4
是一个 pygame.sprite.Sprite
对象。对于 2 Sprite objets 的碰撞你必须使用 pygame.sprite.collide_rect
:
hits_4 = pygame.sprite.spritecollide(player, platform4, False)
hits_4 = pygame.sprite.collide_rect(player, platform4)
Player
有能力站在可迭代平台上,但他不能站在不可迭代平台上——Platform4
。如何解决这个问题?
class Player(pygame.sprite.Sprite):
def __init__(self):
super().__init__()
pygame.sprite.Sprite.__init__(self)
# [...]
def update(self):
hits_4 = pygame.sprite.spritecollide(player, platform4, False)
if hits_4:
self.pos.y = hits_4[0].rect.top + 1
self.vel.y = 0
class Platform4(pygame.sprite.Sprite):
def __init__(self):
super().__init__()
self.image = platform_images4
self.image.set_colorkey(WHITE1)
self.rect = self.image.get_rect()
self.rect.centerx = 300
self.rect.centery = 500
def update(self):
self.rect.move_ip(-1, 0)
if self.rect.right <= 0:
self.kill()
platform4 = Platform4()
all_sprites = pygame.sprite.Group()
all_sprites.add(player, fire, platform4)
platform4
是一个 pygame.sprite.Sprite
对象。对于 2 Sprite objets 的碰撞你必须使用 pygame.sprite.collide_rect
:
hits_4 = pygame.sprite.spritecollide(player, platform4, False)
hits_4 = pygame.sprite.collide_rect(player, platform4)