Advertisement
Windspar

Example making text look glitchy

Oct 8th, 2022
978
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.09 KB | None | 0 0
  1. import random
  2. import pygame
  3.  
  4. class RandomSwitchTimer:
  5.     def __init__(self, ticks, on_intervals, off_intervals):
  6.         self.next_ticks = ticks + random.choice(on_intervals)
  7.         self.on_intervals = on_intervals
  8.         self.off_intervals = off_intervals
  9.         self.switch = True
  10.  
  11.     def tick(self, ticks):
  12.         if ticks > self.next_ticks:
  13.             if self.switch:
  14.                 self.next_ticks += random.choice(self.on_intervals)
  15.                 self.switch = False
  16.             else:
  17.                 self.next_ticks += random.choice(self.off_intervals)
  18.                 self.switch = True
  19.  
  20.             return True
  21.         return False
  22.  
  23. class GlitchEffect:
  24.     def __init__(self, sprite):
  25.         self.sprite = sprite
  26.         ticks = pygame.time.get_ticks()
  27.         self.blink_timer = RandomSwitchTimer(ticks,
  28.                             (600, 999, 1222, 1556),
  29.                             (40, 48, 54))
  30.         self.jump_timer = RandomSwitchTimer(ticks,
  31.                             (140, 401, 703),
  32.                             (30, 54, 101))
  33.         self.show = True
  34.         self.rect = sprite.rect.copy()
  35.  
  36.     def draw(self, surface):
  37.         if self.show:
  38.             surface.blit(self.sprite.image, self.sprite.rect)
  39.  
  40.     def update(self, ticks):
  41.         if self.blink_timer.tick(ticks):
  42.             self.show = not self.blink_timer.switch
  43.  
  44.         if self.jump_timer.tick(ticks):
  45.             if self.jump_timer.switch:
  46.                 self.sprite.rect = self.rect.copy()
  47.             else:
  48.                 self.sprite.rect.y -= random.choice((-7, -4, 3))
  49.  
  50. def sprite_text(font, text, position, color, anchor):
  51.     sprite = pygame.sprite.Sprite()
  52.     sprite.image = font.render(text, 1, color)
  53.     sprite.rect = sprite.image.get_rect()
  54.     setattr(sprite.rect, anchor, position)
  55.     return sprite
  56.  
  57. class SimpleWindow:
  58.     def __init__(self, caption, width, height, flags=0):
  59.         # Basic pygame setup
  60.         pygame.display.set_caption(caption)
  61.         self.surface = pygame.display.set_mode((width, height), flags)
  62.         self.rect = self.surface.get_rect()
  63.         self.clock = pygame.time.Clock()
  64.         self.exit_window = False
  65.         self.delta = 0
  66.         self.fps = 60
  67.  
  68.         self.scene()
  69.  
  70.     def scene(self):
  71.         font = pygame.font.Font(None, 36)
  72.         text = sprite_text(font, "1999", self.rect.center, "red", "center")
  73.         text.image.set_alpha(100)
  74.         self.effect = GlitchEffect(text)
  75.  
  76.     def on_draw(self):
  77.         self.surface.fill("black");
  78.         self.effect.draw(self.surface)
  79.  
  80.         # update
  81.         ticks = pygame.time.get_ticks()
  82.         self.effect.update(ticks)
  83.  
  84.     def run(self):
  85.         while not self.exit_window:
  86.             for event in pygame.event.get():
  87.                 if event.type == pygame.QUIT:
  88.                     self.exit_window = True
  89.  
  90.             self.on_draw()
  91.             pygame.display.flip()
  92.             self.delta = self.clock.tick(self.fps)
  93.  
  94. if __name__ == "__main__":
  95.     pygame.init()
  96.     window = SimpleWindow("Text Effects", 800, 600)
  97.     window.run()
  98.     pygame.quit()
  99.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement