Advertisement
Windspar

Pygame DriftSprite or SlidingSprite Example

Apr 25th, 2023
674
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.41 KB | Gaming | 0 0
  1. import pygame
  2.  
  3. class DriftSprite(pygame.sprite.Sprite):
  4.     def __init__(self, image, position, speed, friction):
  5.         super().__init__()
  6.         self.image = image
  7.         self.rect = image.get_rect(center=position)
  8.         self.center = pygame.Vector2(self.rect.center)
  9.         self.vector = pygame.Vector2()
  10.         self.friction = friction
  11.         self.throttle = 0
  12.         self.speed = speed
  13.  
  14.     def move(self, delta, vector=None):
  15.         if vector is None:
  16.             vector = self.vector
  17.             if self.throttle > 0:
  18.                 self.throttle -= self.friction * delta
  19.         else:
  20.             self.vector = vector
  21.             self.throttle = self.speed
  22.  
  23.         if self.throttle > 0:
  24.             self.center += vector * self.throttle * delta
  25.             self.rect.center = self.center
  26.  
  27. def main():
  28.     # Basic Pygame Setup
  29.     pygame.init()
  30.     pygame.display.set_caption("Example")
  31.     surface = pygame.display.set_mode((800, 600))
  32.     clock = pygame.time.Clock()
  33.     rect = surface.get_rect()
  34.     running = True
  35.     delta = 0
  36.     fps = 60
  37.  
  38.     # Variables
  39.     background = 'grey10'
  40.     image = pygame.Surface((30, 30))
  41.     image.fill('skyblue')
  42.     player = DriftSprite(image, rect.center, 80, 240)
  43.     sprites = pygame.sprite.Group(player)
  44.     idle = pygame.Vector2()
  45.     dkey = {'up': (pygame.K_UP, pygame.K_w),
  46.             'down': (pygame.K_DOWN, pygame.K_s),
  47.             'left': (pygame.K_LEFT, pygame.K_a),
  48.             'right': (pygame.K_RIGHT, pygame.K_d)}
  49.  
  50.     is_pressed = lambda key, dk: any([key[k] for k in dk])
  51.  
  52.     # Main Loop
  53.     while running:
  54.         for event in pygame.event.get():
  55.             if event.type == pygame.QUIT:
  56.                 running = False
  57.  
  58.         # Logic
  59.         direction = pygame.Vector2()
  60.         pressed = pygame.key.get_pressed()
  61.  
  62.         if is_pressed(pressed, dkey['left']):
  63.             direction.x -= 1
  64.  
  65.         if is_pressed(pressed, dkey['right']):
  66.             direction.x += 1
  67.  
  68.         if is_pressed(pressed, dkey['up']):
  69.             direction.y -= 1
  70.  
  71.         if is_pressed(pressed, dkey['down']):
  72.             direction.y += 1
  73.  
  74.         if direction != idle:
  75.             player.move(delta, direction.normalize())
  76.         else:
  77.             player.move(delta)
  78.  
  79.         # Draw
  80.         surface.fill(background)
  81.         sprites.draw(surface)
  82.         pygame.display.flip()
  83.         delta = clock.tick(fps) * 0.001
  84.  
  85. main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement