Nein, es wird nicht blit die Bilder. Pygame ignoriert es einfach, wenn Sie versuchen, etwas außerhalb des Bildschirms zu blittieren. Es sollte Ihr Programm nicht verlangsamen, es sei denn, es gibt eine riesige Menge an Objekten, da es für pygame einen Bruchteil der Zeit braucht, um festzustellen, dass das Bild außerhalb des Bildschirms ist. Dies ist jedoch keine große Sache.
Realisierte meine Antwort fehlte Beweis (was schlecht ist, mkay ...), so lief ich einige Tests, um meinen Standpunkt zu beweisen. Ich habe 3 Bedingungen getestet: Blitting auf den Bildschirm, Blitting außerhalb des Bildschirms und nichts tun. Die Anzahl der Sekunden, die sie genommen haben, ist unbedeutend, da sie auf der Leistung meines Computers basieren (ein 5 Jahre alter Laptop), also suchen Sie stattdessen nach den Faktoren zwischen ihnen; Sie sollten für alle gleich sein.
5.000 blits
- Innen: ,033265519510593734 Sekunden
- Außen: ,002402466401003767 Sekunden
- Nichts: ,00023237229449441657 Sekunden
500.000 blits
- Innen: 3,639024520190433 Sekunden
- Außen: 0,23328839021967726 Sekunden
- Nichts: ,023549600850092247 Sekunden
50.000.000 blits
- Innen: 360,48034191795153 Sekunden
- Außen: 23,317473949049596 Sekunden
- Nichts: 2,3507101910654455 Sekunden
Wie Sie sehen können, dauert das Blitting außerhalb des Bildschirms länger als nicht blitzend, aber es dauert nicht so viel Zeit, wie tatsächlich auf den Bildschirm zu blitzen. Blitzen außerhalb des Bildschirms ist kaum ein Kostenpunkt.
Für weitere Referenz, hier ist der Test, den ich erstellt:
setup = """
import pygame
pygame.init()
screen = pygame.display.set_mode((100, 100))
image = pygame.Surface((100, 100))
"""
statement1 = """
for i in range(5000):
screen.blit(image, (0, 0))
"""
statement2 = """
for i in range(5000):
screen.blit(image, (200, 200))
"""
statement3 = """
for i in range(5000):
pass
"""
from timeit import timeit
num_of_times = 10000
inside = timeit(stmt=statement1, setup=setup, number=num_of_times)
outside = timeit(stmt=statement2, setup=setup, number=num_of_times)
nothing = timeit(stmt=statement3, setup=setup, number=num_of_times)
print("Inside: {} seconds".format(inside/num_of_times))
print("Outside: {} seconds".format(outside/num_of_times))
print("Nothing: {} seconds".format(nothing/num_of_times))
Okay, das ist, was ich dachte, aber da ich nicht wusste, was in der Blit Funktion versteckt ich war nicht sicher, ob es nicht tat, viele Berechnungen für nichts. – Sorade
@Sorade Ich habe meine Antwort aktualisiert, um mehr Informationen und einen tatsächlichen Beweis dafür zu bekommen, dass ich richtig liege, also müssen Sie nicht blind einem verrückten Typen mit Internetzugang glauben. –