Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import pygame
- from pygame.sprite import Group, Sprite
- class Entity(Sprite):
- # @param anchor is rect position in text form. "topleft", "topright", "center"
- def __init__(self, image, velocity, position, anchor):
- super().__init__()
- self.image = image
- self.rect = image.get_rect()
- setattr(self.rect, anchor, position)
- self.velocity = velocity
- self.position = pygame.Vector2(self.rect.center)
- def move(self, *args):
- if len(args) == 1:
- self.position += args[0]
- else:
- self.position += args
- self.rect.center = self.position
- def set_position(self, *args):
- if len(args) == 1:
- self.position = pygame.Vector2(args[0])
- else:
- self.position = pygame.Vector2(args)
- self.rect.center = self.position
- def main():
- pygame.init()
- surface = pygame.display.set_mode((800, 600))
- clock = pygame.time.Clock()
- rect = surface.get_rect()
- running = True
- delta = 0
- fps = 60
- image = pygame.Surface((20, 20), pygame.SRCALPHA)
- image.fill(pygame.Color("firebrick"))
- player = Entity(image, 100, rect.center, "center")
- sprites = Group(player)
- while running:
- for event in pygame.event.get():
- if event.type == pygame.QUIT:
- running = False
- direction = pygame.Vector2()
- key_states = pygame.key.get_pressed()
- if any([key_states[k] for k in (pygame.K_UP, pygame.K_w)]):
- direction.y -= 1
- if any([key_states[k] for k in (pygame.K_DOWN, pygame.K_s)]):
- direction.y += 1
- if any([key_states[k] for k in (pygame.K_LEFT, pygame.K_a)]):
- direction.x -= 1
- if any([key_states[k] for k in (pygame.K_RIGHT, pygame.K_d)]):
- direction.x += 1
- if direction != pygame.Vector2():
- # Real world movement.
- direction.normalize_ip()
- player.move(direction * delta * player.velocity)
- surface.fill(pygame.Color("black"))
- sprites.draw(surface)
- pygame.display.flip()
- # Smooth movement
- delta = clock.tick(fps) * 0.001
- pygame.quit()
- main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement