0
Ich versuche, ein einfaches Jump'n'Run-Spiel in Pygame zu machen, und habe eine grundlegende Umriss von dem, wie ich das Level aussehen soll erstellt. Um das Zeichen jedoch zu verschieben, muss ich den Bildschirm kontinuierlich mit Farbe füllen, die die Karte überlappt. Wie soll ich vorgehen?Problem mit Blit in Pygame
Mein Code:
import pygame
from pygame import *
import sys
WIN_WIDTH = 680
WIN_HEIGHT = 500
DISPLAY = (WIN_WIDTH, WIN_HEIGHT) #variable for screen display
DEPTH = 32 #standard
FLAGS = 0 #standard
RED = (0, 0, 255)
class Hero():
def __init__(self, x, y):
self.x = x
self.y = y
def appearance(self):
return pygame.image.load('C:\\Users\\admin\\Desktop\\Player1.png')
def move_right(self):
self.x += 10
return self.x
def move_left(self):
self.x -= 10
return self.x
player = Hero(56, 420)
player_img = player.appearance()
x = 0
y = 0
platformx = 0
platformy = 0
WHITE = (255, 255, 255)
pygame.init()
screen = pygame.display.set_mode(DISPLAY, FLAGS, DEPTH)
screen.fill(WHITE)
pygame.display.set_caption("Rum Islands")
timer = pygame.time.Clock()
level = [
"PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP", #45 x 25
"P P",
"P P",
"P P",
"P PPPPPPPPPPP P",
"P P",
"P P",
"P P",
"P PPPPPPPP P",
"P P",
"P PPPPPPP P",
"P PPPPPP P",
"P P",
"P PPPPPPP P",
"P P",
"P PPPPPP P",
"P P",
"P PPPPPPPPPPP P",
"P P",
"P PPPPPPPPPPP P",
"P P",
"P P",
"P P",
"P P",
"PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP",]
pygame.key.set_repeat(10,10)
while True:
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
x = player.move_left()
elif event.key == pygame.K_RIGHT:
x = player.move_right()
screen.fill(WHITE)
for row in level:
for col in row:
if col == "P":
pygame.draw.rect(screen, RED, (platformx, platformy, 40, 20))
platformx += 15
platformy += 20
platformx = 0
screen.blit(player_img, (x, y))
pygame.display.update()
Wenn Ihre Map das gesamte Fenster ausfüllt (mit 'pygame.draw.rect()'), müssen Sie 'fill()' nicht verwenden. Also zuerst Code ohne 'fill (WHITE)') – furas
oder einfach 'fill (WHITE)' vor dem Zeichnen der Karte - wie Sie in allen Tutorials sehen können. – furas
BTW: Sie müssen 'level = ...' nicht innerhalb von 'while' zuweisen - Sie können es vor' while' machen. – furas