Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import pygame
- class Scene:
- def __init__(self, display):
- self.display = display
- def on_draw(self, surface): pass
- def on_event(self, event): pass
- def on_update(self, delta): pass
- class Display:
- def __init__(self, caption, width, height, flags=0, fps=60):
- pygame.display.set_caption
- self.display = pygame.display.set_mode((width, height), flags)
- self.rect = self.display.get_rect()
- self.clock = pygame.time.Clock()
- self.running = True
- self.delta = 0
- self.fps = fps
- self.scene = None
- def run(self, scene):
- self.scene = scene
- while self.running:
- for event in pygame.event.get():
- if event.type == pygame.QUIT:
- self.running = False
- else:
- self.scene.on_event(event)
- self.scene.on_update(self.delta)
- self.scene.on_draw(self.display)
- pygame.display.flip()
- self.delta = self.clock.tick(self.fps) / 1000
- class Sprite:
- def __init__(self, image, center):
- self.image = image
- self.rect = image.get_rect(center=center)
- self.center = pygame.Vector2(self.rect.center)
- def draw(self, surface):
- surface.blit(self.image, self.rect)
- def move(self, movement):
- self.center += movement
- self.rect.center = self.center
- def set_center(self, center):
- self.center = center
- self.rect.center = center
- class Moving:
- def __init__(self, sprite, speed):
- self.sprite = sprite
- self.start = sprite.center
- self.target = None
- self.speed = speed
- self.lerp = 0
- def set_target(self, mpos):
- if self.target is None:
- self.target = pygame.Vector2(mpos)
- def update(self, delta):
- if self.target:
- self.lerp += delta * self.speed / 100
- if self.lerp >= 1:
- self.lerp = 1
- center = self.start.lerp(self.target, self.lerp)
- self.sprite.set_center(center)
- if self.lerp == 1:
- self.target = None
- self.start = center
- self.lerp = 0
- class Example(Scene):
- def __init__(self, display):
- super().__init__(display)
- self.background_color = 'grey5'
- image = self.create_image((50, 50), 'dodgerblue')
- self.sprite = Sprite(image, display.rect.center)
- self.moving = Moving(self.sprite, 50)
- def create_image(self, size, color):
- surface = pygame.Surface(size, pygame.SRCALPHA)
- surface.fill((0, 0, 0, 0))
- rect = surface.get_rect()
- points = rect.midright, rect.bottomleft, rect.topleft
- pygame.draw.polygon(surface, color, points)
- return surface
- def on_draw(self, surface):
- surface.fill(self.background_color)
- self.sprite.draw(surface)
- def on_event(self, event):
- if event.type == pygame.MOUSEBUTTONDOWN:
- self.moving.set_target(event.pos)
- def on_update(self, delta):
- self.moving.update(delta)
- def main():
- pygame.init()
- display = Display("Example Smooth Movement Between Point", 800, 600)
- display.run(Example(display))
- pygame.quit()
- main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement