在pygame中移动角色而不重复复制图像

时间:2016-08-27 15:33:28

标签: python pygame

我的角色,像大多数角色一样,应该被相同的图像重复替换几个像素以模拟运动。相反,我的代码导致图像在我移动时被复制,而现在它更像是绘图应用程序而不是移动角色。有人可以告诉我为什么会发生这种情况以及可以采取哪些措施来取代之前的图像?提前谢谢。

import pygame, sys
from pygame.locals import *

pygame.init()
DISPLAYSURF=pygame.display.set_mode((800,800))
pygame.display.set_caption('Hola Amigos!')

pixel_one=pygame.image.load('pixel_one.png')
pixel_one=pygame.transform.scale(pixel_one, (5,5))

def pixel(pixel_onex,pixel_oney):
        DISPLAYSURF.blit(pixel_one, (pixel_onex, pixel_oney))

pixel_onex=10
pixel_oney=10

x_change=0
y_change=0

while True: #main game loop
    for event in pygame.event.get():
        if event.type == pygame.KEYDOWN: 
            if event.key == pygame.K_LEFT:
                x_change = -5
            elif event.key == pygame.K_RIGHT:
                x_change = 5
            elif event.key == pygame.K_UP:
                y_change = -5
            elif event.key == pygame.K_DOWN:
                y_change = 5

        if event.type == pygame.KEYUP:
            if event.key == pygame.K_LEFT or pygame.K_RIGHT or pygame.K_UP or pygame.K_DOWN:
                x_change=0
                y_change=0
        if event.type==QUIT:
            pygame.quit()
            sys.exit()

    pixel_onex += x_change
    pixel_oney += y_change

    pixel(pixel_onex,pixel_oney)

    pygame.display.update()

1 个答案:

答案 0 :(得分:1)

在进入主循环之前,添加类似

的语句
background = pygame.Surface(DISPLAYSURF.get_size())

然后将背景blit放到DISPLAYSURF上。在每次迭代之后,在更新所有内容之后但在绘制任何其他内容之前,将背景blit到DISPLAYSURF上以创建一个干净的表面。