2017-03-21 5 views
0

ich mein Spiel auf Python mit pygame zu schaffen, aber ich habe einen Fehler bekam während Bildschirm Aktualisierung: my older character position are displayedPygame Update Fehler

ich ein Muster bin mit meinem Bildschirm zu füllen, und ich habe es jedes Mal, und diese aktualisieren, bevor meine Charakter, damit es nicht laggy sein sollte, dies ist mein Code:

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) 
+0

Könnten Sie einfach überprüfen, ob Ihr Code-Einzug korrekt im Forum angekommen ist? Ich schaue speziell auf die 'Personnage' Klasse. –

Antwort

0

Sie über die letzten Bilder immer wieder zeichnen, ohne die alten Sachen Entrümpelung. Sie können mit den anderen Bildern nicht sagen, weil sie statisch sind, aber es zeigt mit dem Charakter. Hinzufügen:

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

an den Anfang Ihrer Spielschleife, um den Bildschirm zu aktualisieren, um die neuen Standorte zu zeichnen.