Come ha detto fisica-all, il problema è che non stai cancellando e ridisegnando, ma stai disegnando su uno schermo sporco. Non è pulitissima, ma prova a dare un'occhiata a sta roba:
Python:
import pygame
pygame.init()
screen = pygame.display.set_mode((800, 600))
def vecsum(a, b):
return tuple(x + y for x,y in zip(a,b))
class Entity():
def __init__(self, imagePath, position):
self.sprite = pygame.image.load(imagePath)
self.position = position
self.direction = (0, 0)
def draw(self):
self.position = vecsum(self.position, self.direction)
screen.blit(self.sprite, self.position)
def move(self, event, speed):
if event.type == pygame.KEYDOWN or event.type == pygame.KEYUP:
if event.type == pygame.KEYUP: speed = -speed
if event.key == pygame.K_RIGHT: self.direction = vecsum(self.direction, (speed, 0))
if event.key == pygame.K_LEFT: self.direction = vecsum(self.direction, (-speed, 0))
if event.key == pygame.K_UP: self.direction = vecsum(self.direction, (0, -speed))
if event.key == pygame.K_DOWN: self.direction = vecsum(self.direction, (0, speed))
tree = Entity('tree.png', (300, 300))
run = True
while run:
# pulisci lo schermo (i.e., riempilo di bianco)
screen.fill((255,255,255))
# gestisci gli eventi
for event in pygame.event.get():
if event.type == pygame.QUIT: run = False
tree.move(event, 1)
# disegna gli sprites
tree.draw()
# aggiorna lo schermo
pygame.display.update()