Pygame更新bug

时间:2017-03-21 07:59:44

标签: python pygame

我正在使用pygame在python上创建我的游戏但是在更新屏幕时我遇到了一个错误: my older character position are displayed

我正在使用一个模式来填充我的屏幕并且我每次刷新它并且在我的角色之前这样它所以它不应该是滞后的,这是我的代码:

import pygame, sys
from pygame.locals import *

pygame.init()

#Open Pygame window
taille_fenetre = [960, 640]
fenetre = pygame.display.set_mode(taille_fenetre)
pygame.key.set_repeat(400, 30)

clock = pygame.time.Clock()

#Chargement et collage du fond
fond = pygame.image.load("brock.png").convert()
for a in range(taille_fenetre[0] // fond.get_width() + 1):
    for i in range(taille_fenetre[1] // fond.get_height() + 1):
        fenetre.blit(fond, (a*fond.get_width(),i*fond.get_height()))

room_size = (taille_fenetre[0]-64*2,taille_fenetre[1]-64*2)
room = pygame.Surface(room_size)
room.fill((255,0,0))
terre = pygame.image.load("terre.png").convert()
for a in range(room.get_width() // terre.get_width() + 1):
    for i in range(room.get_height() // terre.get_height() + 1):
        room.blit(terre, (a*terre.get_width(),i*terre.get_height()))

shadow_room = pygame.image.load('shadow_room.png')

def blit_alpha(target, source, location, opacity):
    x = location[0]
    y = location[1]
    temp = pygame.Surface((source.get_width(), source.get_height())).convert()
    temp.blit(target, (-x, -y))
    temp.blit(source, (0, 0))
    temp.set_alpha(opacity)        
    target.blit(temp, location)

class Personnage:
def __init__(self):
    self.imagesrc = "perso.png"
    self.image = pygame.image.load(self.imagesrc).convert_alpha()
    self.size = self.image.get_size()
    self.position = [0,0]
    self.vitesse = 5
    self.sante = 5
def bouger(self,facteur):
    self.position = [self.position[0] - self.vitesse * facteur[0],self.position[1] - self.vitesse * facteur[1]]
def afficher(self,fenetre):
    print(self.position)
    fenetre.blit(self.image,self.position)
#INFINITE LOOP
continuer = 1

perso = Personnage()
while continuer:
    relachex = True
    relachey = True

    #Re-collage
    fenetre.blit(fond, (0,0))
    fenetre.blit(room,(64,64))
    blit_alpha(room,shadow_room,(0,0),128)

    for event in pygame.event.get():        #Attente des événements
            if event.type == QUIT:
                    continuer = 0
                    pygame.quit()
                    sys.exit()

    keys = pygame.key.get_pressed()
    if keys[K_LEFT]:
        perso.bouger([1,0])
    if keys[K_RIGHT]:
        perso.bouger([-1,0])
    if keys[K_DOWN]:
        perso.bouger([0,-1])
    if keys[K_UP]:
        perso.bouger([0,1])
    #REFRESH
    perso.afficher(fenetre)
    pygame.display.flip()
        clock.tick(60)

1 个答案:

答案 0 :(得分:0)

你正在反复绘制以前的图像而不清除旧的东西。你不能告诉其他图像,因为它们是静态的,但它与角色一起显示。添加:

fenetre.fill((0, 0, 0))

到游戏循环的顶部,刷新屏幕以绘制新位置。