Ich versuche, ein "Runner" -Stil-Spiel in PyGame (wie Geometry Dash) zu machen, wo sich der Hintergrund ständig bewegt. Bis jetzt funktioniert alles gut, aber das Rendern der Hintergrundbilder beschränkt die Bildfrequenz auf mehr als 35 Bilder pro Sekunde. Bevor ich das unendliche/wiederholende Hintergrundelement hinzugefügt habe, könnte es leicht mit 60 fps laufen. Diese beiden Codezeilen sind dafür verantwortlich (wenn das Spiel entfernt wird, kann es mit 60 + fps laufen):Das Rendern eines großen Bildes in PyGame verursacht niedrige Framerate
screen.blit (bg, (bg_x, 0)) | screen.blit (bg, (bg_x2, 0))
Gibt es etwas, was ich tun könnte, um das Spiel schneller laufen zu lassen? Danke im Voraus!
Simplified Source Code:
import pygame
pygame.init()
screen = pygame.display.set_mode((1000,650), 0, 32)
clock = pygame.time.Clock()
def text(text, x, y, color=(0,0,0), size=30, font='Calibri'): # blits text to the screen
text = str(text)
font = pygame.font.SysFont(font, size)
text = font.render(text, True, color)
screen.blit(text, (x, y))
def game():
bg = pygame.image.load('background.png')
bg_x = 0 # stored positions for the background images
bg_x2 = 1000
pygame.time.set_timer(pygame.USEREVENT, 1000)
frames = 0 # counts number of frames for every second
fps = 0
while True:
frames += 1
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
quit()
if event.type == pygame.USEREVENT: # updates fps every second
fps = frames
frames = 0 # reset frame count
bg_x -= 10 # move the background images
bg_x2 -= 10
if bg_x == -1000: # if the images go off the screen, move them to the other end to be 'reused'
bg_x = 1000
elif bg_x2 == -1000:
bg_x2 = 1000
screen.fill((0,0,0))
screen.blit(bg, (bg_x, 0))
screen.blit(bg, (bg_x2, 0))
text(fps, 0, 0)
pygame.display.update()
#clock.tick(60)
game()
Hier ist das Hintergrundbild:
Vielen Dank! Es läuft jetzt wie eine Brise! –