Pygame - Update der Spritegroup nur von den sichtbaren Objekten

Hier werden alle anderen GUI-Toolkits sowie Spezial-Toolkits wie Spiele-Engines behandelt.
Antworten
flooojava
User
Beiträge: 13
Registriert: Dienstag 27. Oktober 2015, 22:48

Hallo,

wir arbeiten mit mehreren Spritegroups worin die Objekte verteilt sind auf unserem ganzen Level. Da wir eine Clockrate von 30fps haben wird somit das Bild relativ oft ( und auch ausreichend oft) upgedated. Jedoch wird hierbei immer das komplette Level upgedated, sprich auch Bereich der am Screen noch nicht angezeigt wird. Dies ist sehr vermutlich der Auslöser zu geringen FPS.

Gibt es denn eine Möglichkeit nur jene Objekte zu aktualisieren welche sich auch im Sichtbereich befinden? Wir benutzen bereits pygame.display.update() und unsere Spritegroups beziehen sich immer auf das komplette Level.

Würden uns über Tipps freuen!

LG
BlackJack

@flooojava: Was heisst ”aktualisiert”? Das ihr die Sprites auf dem riesigen Hintergrundbild blittet und dann davon nur den den sichtbaren Ausschnitt ”ausschneidet” und anzeigt? Das wäre dann wohl die falsche Reihenfolge.
flooojava
User
Beiträge: 13
Registriert: Dienstag 27. Oktober 2015, 22:48

Ich glaube du meinst das richtige, ja.

Wir haben quasi ein Level mit 4000x3000 Pixel. Auf dem kompletten Level befinden sich bereits Objekte. Nun wird immer der komplette Level geupdated, obwohl wir ja nur einen Ausschnitt davon sehen (in unserem Fall 800x600).

Dementsprechend updaten wir eigentlich "sinnlos" auch den Rest derzeit -> Dies läuft vermutlich auf das Problem mit den FPS hinaus.

Wie sieht denn die andere Möglichkeit aus dies zu realisieren sofern diese Reihenfolge die falsche ist. (zumindest für das Raspberry Pi)
Oder kann irgendwie mit HWSURFACE oder OPENGL mittels pygame.display.set_mode() irgendwas verbessert werden? Oder funktioniert mit RenderUpdate anstatt SpriteGroup irgendwas, sodass diese dann nur die "neuen" upgedated werden?
BlackJack

@flooojava: Na man schneidet sinnvollerweise erst den sichtbaren Bereich des Hintergrunds aus und blittet *da* drauf dann die sichtbaren Sprites.
flooojava
User
Beiträge: 13
Registriert: Dienstag 27. Oktober 2015, 22:48

Danke Blackjack für deine Rückmeldung. Mit einer oben genannten Variante kann dieses Problem nicht gedämpft werden? HWSURFACE/OPENGL modus?
Antworten