Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import random
- import pygame
- class RandomSwitchTimer:
- def __init__(self, ticks, on_intervals, off_intervals):
- self.next_ticks = ticks + random.choice(on_intervals)
- self.on_intervals = on_intervals
- self.off_intervals = off_intervals
- self.switch = True
- def tick(self, ticks):
- if ticks > self.next_ticks:
- if self.switch:
- self.next_ticks += random.choice(self.on_intervals)
- self.switch = False
- else:
- self.next_ticks += random.choice(self.off_intervals)
- self.switch = True
- return True
- return False
- class GlitchEffect:
- def __init__(self, sprite):
- self.sprite = sprite
- ticks = pygame.time.get_ticks()
- self.blink_timer = RandomSwitchTimer(ticks,
- (600, 999, 1222, 1556),
- (40, 48, 54))
- self.jump_timer = RandomSwitchTimer(ticks,
- (140, 401, 703),
- (30, 54, 101))
- self.show = True
- self.rect = sprite.rect.copy()
- def draw(self, surface):
- if self.show:
- surface.blit(self.sprite.image, self.sprite.rect)
- def update(self, ticks):
- if self.blink_timer.tick(ticks):
- self.show = not self.blink_timer.switch
- if self.jump_timer.tick(ticks):
- if self.jump_timer.switch:
- self.sprite.rect = self.rect.copy()
- else:
- self.sprite.rect.y -= random.choice((-7, -4, 3))
- def sprite_text(font, text, position, color, anchor):
- sprite = pygame.sprite.Sprite()
- sprite.image = font.render(text, 1, color)
- sprite.rect = sprite.image.get_rect()
- setattr(sprite.rect, anchor, position)
- return sprite
- class SimpleWindow:
- def __init__(self, caption, width, height, flags=0):
- # Basic pygame setup
- pygame.display.set_caption(caption)
- self.surface = pygame.display.set_mode((width, height), flags)
- self.rect = self.surface.get_rect()
- self.clock = pygame.time.Clock()
- self.exit_window = False
- self.delta = 0
- self.fps = 60
- self.scene()
- def scene(self):
- font = pygame.font.Font(None, 36)
- text = sprite_text(font, "1999", self.rect.center, "red", "center")
- text.image.set_alpha(100)
- self.effect = GlitchEffect(text)
- def on_draw(self):
- self.surface.fill("black");
- self.effect.draw(self.surface)
- # update
- ticks = pygame.time.get_ticks()
- self.effect.update(ticks)
- def run(self):
- while not self.exit_window:
- for event in pygame.event.get():
- if event.type == pygame.QUIT:
- self.exit_window = True
- self.on_draw()
- pygame.display.flip()
- self.delta = self.clock.tick(self.fps)
- if __name__ == "__main__":
- pygame.init()
- window = SimpleWindow("Text Effects", 800, 600)
- window.run()
- pygame.quit()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement