1
파이 게임의 sprite
모듈을 사용하여 투명 배경이 아닌 두 개의 스프라이트의 충돌을 감지하면 투명 배경이 아닌 실제 스프라이트가 충돌하는 경우에만 True
을 반환 할 수 있습니까?투명 배경이있는 스프라이트에 대한 픽셀 완전 충돌 감지
파이 게임의 sprite
모듈을 사용하여 투명 배경이 아닌 두 개의 스프라이트의 충돌을 감지하면 투명 배경이 아닌 실제 스프라이트가 충돌하는 경우에만 True
을 반환 할 수 있습니까?투명 배경이있는 스프라이트에 대한 픽셀 완전 충돌 감지
pygame.mask.from_surface
함수를 사용하여 스프라이트에 self.mask
특성을 부여하십시오.
self.mask = pygame.mask.from_surface(self.image)
그럼 당신은 pygame.sprite.spritecollide
같은 스프라이트 충돌 함수 중 하나에 콜백 함수로 pygame.sprite.collide_mask
를 전달할 수 있으며, 충돌 감지는 완벽한 픽셀 될 것입니다.
import pygame as pg
class Player(pg.sprite.Sprite):
def __init__(self, pos):
super(Player, self).__init__()
self.image = pg.Surface((120, 120), pg.SRCALPHA)
pg.draw.polygon(self.image, (0, 100, 240), [(60, 0), (120, 120), (0, 120)])
self.rect = self.image.get_rect(center=pos)
self.mask = pg.mask.from_surface(self.image)
class Enemy(pg.sprite.Sprite):
def __init__(self, pos):
super(Enemy, self).__init__()
self.image = pg.Surface((120, 120), pg.SRCALPHA)
pg.draw.circle(self.image, (240, 100, 0), (60, 60), 60)
self.rect = self.image.get_rect(center=pos)
self.mask = pg.mask.from_surface(self.image)
class Game:
def __init__(self):
self.screen = pg.display.set_mode((640, 480))
self.player = Player((20, 20))
self.enemies = pg.sprite.Group(Enemy((320, 240)))
self.all_sprites = pg.sprite.Group(self.player, self.enemies)
self.done = False
self.clock = pg.time.Clock()
def run(self):
while not self.done:
self.event_loop()
self.update()
self.draw()
pg.display.flip()
self.clock.tick(60)
def event_loop(self):
for event in pg.event.get():
if event.type == pg.QUIT:
self.done = True
elif event.type == pg.MOUSEMOTION:
self.player.rect.center = event.pos
def update(self):
# Check if the player collides with an enemy sprite. The
# `pygame.sprite.collide_mask` callback uses the `mask`
# attributes of the sprites for the collision detection.
if pg.sprite.spritecollide(self.player, self.enemies, False, pg.sprite.collide_mask):
pg.display.set_caption('collision')
else:
pg.display.set_caption('no collision')
def draw(self):
self.screen.fill((30, 30, 30))
self.all_sprites.draw(self.screen)
if __name__ == '__main__':
pg.init()
game = Game()
game.run()
pg.quit()
: 여기
pygame.sprite.spritecollide(self.player, self.enemies, False, pygame.sprite.collide_mask)
완성 예 (두 스프라이트 충돌 할 때 자막이 변경)의