Mercurial > pavulon
changeset 4:bc3b371cb5c4
shadows and message window
| author | Radomir Dopieralski <moindev@sheep.art.pl> |
|---|---|
| date | Sat, 23 Aug 2008 02:35:05 +0200 |
| parents | 5d282bc9a98c |
| children | 22fd63214aed |
| files | MgOpenModataBold.ttf qq.py shadow.png |
| diffstat | 3 files changed, 55 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/qq.py Sat Aug 23 01:21:34 2008 +0200 +++ b/qq.py Sat Aug 23 02:35:05 2008 +0200 @@ -6,6 +6,7 @@ pygame.init() pygame.display.set_mode((360, 240)) +font = pygame.font.Font("MgOpenModataBold.ttf", 11) # Motion offsets for particular directions # N E S W @@ -25,6 +26,37 @@ line.append(image.subsurface((x*width, y*height, width, height))) return tiles +class Message: + image = pygame.image.load("dialog.png").convert() + image.set_alpha(192) + + def __init__(self, text): + self.screen = pygame.display.get_surface() + self.text = text + self.rect = self.image.get_rect() + self.rect.midtop = self.screen.get_rect().midtop + self.rect.move_ip(0, 8) + + def show(self): + self.screen.blit(self.image, self.rect) + for lineno, line in enumerate(self.text.split('\n')): + image = font.render(line, True, (0xFF, 0xFF, 0xFF)) + shadow = font.render(line, True, (0x22, 0x22, 0x66)) + rect = image.get_rect() + rect.topleft = self.rect.topleft + rect.move_ip(8, 8+lineno*font.get_linesize()) + shadow_rect = rect.move(2, 2) + self.screen.blit(shadow, shadow_rect) + self.screen.blit(image, rect) + pygame.display.flip() + while True: + event = pygame.event.wait() + if event.type == QUIT: + return + elif event.type == KEYDOWN: + return + + class SortedUpdates(pygame.sprite.RenderUpdates): def sprites(self): @@ -32,6 +64,17 @@ sprites.sort(lambda a, b: a.depth - b.depth) return sprites +class Shadow(pygame.sprite.Sprite): + image = pygame.image.load("shadow.png").convert() + image.set_alpha(64) + + def __init__(self, sprite): + pygame.sprite.Sprite.__init__(self) + self.rect = self.image.get_rect() + self.sprite = sprite + + def update(self): + self.rect.midbottom = self.sprite.rect.midbottom class Sprite(pygame.sprite.Sprite): def __init__(self): @@ -115,17 +158,22 @@ except StopIteration: self.animation = None + class Game: def __init__(self): self.screen = pygame.display.get_surface() self.pressed_key = None self.game_over = False + self.shadows = pygame.sprite.RenderUpdates() self.sprites = SortedUpdates() self.level = Level() self.background = self.level.image.copy() self.player = Player() self.sprites.add(self.player) - self.sprites.add(Skeleton()) + self.shadows.add(Shadow(self.player)) + skeleton = Skeleton() + self.sprites.add(skeleton) + self.shadows.add(Shadow(skeleton)) def control(self): keys = pygame.key.get_pressed() @@ -150,11 +198,14 @@ pygame.display.flip() while not self.game_over: self.sprites.clear(self.screen, self.background) + self.shadows.clear(self.screen, self.background) self.sprites.update() if self.player.animation is None: self.control() self.player.update() - dirty = self.sprites.draw(self.screen) + self.shadows.update() + dirty = self.shadows.draw(self.screen) + dirty += self.sprites.draw(self.screen) pygame.display.update(dirty) clock.tick(15) for event in pygame.event.get(): @@ -163,5 +214,7 @@ elif event.type == KEYDOWN: self.pressed_key = event.key + if __name__ == "__main__": Game().main() + Message("Hello\nworld!").show()
