Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import pygame
- class DriftSprite(pygame.sprite.Sprite):
- def __init__(self, image, position, speed, friction):
- super().__init__()
- self.image = image
- self.rect = image.get_rect(center=position)
- self.center = pygame.Vector2(self.rect.center)
- self.vector = pygame.Vector2()
- self.friction = friction
- self.throttle = 0
- self.speed = speed
- def move(self, delta, vector=None):
- if vector is None:
- vector = self.vector
- if self.throttle > 0:
- self.throttle -= self.friction * delta
- else:
- self.vector = vector
- self.throttle = self.speed
- if self.throttle > 0:
- self.center += vector * self.throttle * delta
- self.rect.center = self.center
- def main():
- # Basic Pygame Setup
- pygame.init()
- pygame.display.set_caption("Example")
- surface = pygame.display.set_mode((800, 600))
- clock = pygame.time.Clock()
- rect = surface.get_rect()
- running = True
- delta = 0
- fps = 60
- # Variables
- background = 'grey10'
- image = pygame.Surface((30, 30))
- image.fill('skyblue')
- player = DriftSprite(image, rect.center, 80, 240)
- sprites = pygame.sprite.Group(player)
- idle = pygame.Vector2()
- dkey = {'up': (pygame.K_UP, pygame.K_w),
- 'down': (pygame.K_DOWN, pygame.K_s),
- 'left': (pygame.K_LEFT, pygame.K_a),
- 'right': (pygame.K_RIGHT, pygame.K_d)}
- is_pressed = lambda key, dk: any([key[k] for k in dk])
- # Main Loop
- while running:
- for event in pygame.event.get():
- if event.type == pygame.QUIT:
- running = False
- # Logic
- direction = pygame.Vector2()
- pressed = pygame.key.get_pressed()
- if is_pressed(pressed, dkey['left']):
- direction.x -= 1
- if is_pressed(pressed, dkey['right']):
- direction.x += 1
- if is_pressed(pressed, dkey['up']):
- direction.y -= 1
- if is_pressed(pressed, dkey['down']):
- direction.y += 1
- if direction != idle:
- player.move(delta, direction.normalize())
- else:
- player.move(delta)
- # Draw
- surface.fill(background)
- sprites.draw(surface)
- pygame.display.flip()
- delta = clock.tick(fps) * 0.001
- main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement