Seite 1 von 1

Ruckeln bei einfachen Programmen

Verfasst: Samstag 30. Januar 2010, 14:46
von min
Ich habe einen recht einfachen Skript aber trotzdem ruckelt es sehr stark. Dabei ist mir aufgefallen, dass ohne Fullscreen alles flüssig läuft, sobald ich aber Fullscreen anschalte fängt die Maus an zu ruckeln.
Hier der Skript.

Code: Alles auswählen

import pygame as py
import time as ti
def main():
	EVE = "1b"
	ESC = "GO"
	py.init()
	screen = py.display.set_mode((1920, 1080),py.FULLSCREEN,32) 
	py.display.set_caption("ABC")
	py.mouse.set_visible(1)
	py.key.set_repeat(1, 30)
	while ESC == "GO":
		clock = py.time.Clock().tick(30)
		screen.fill((0, 0, 0))
		py.display.flip()
		events = py.event.get()
		if events != []:
			if str(events[0])[58:60] == EVE:
				print("ESC")
				ESC = "END"
if __name__ == '__main__':
	main()

Verfasst: Samstag 30. Januar 2010, 17:37
von BlackJack
Und die Frage ist nun? Es läuft halt bei Deiner Hard- und Softwarekombination im Vollbild nicht flüssig. Da müssen, wenn's hochkommt 237 MiB/s Daten zur Grafikkarte gepumpt werden.

Anmerkung zum Quelltext: Die Abkürzungen, das neubinden von "Konstanten", und die Art wie die Ereignisse abgearbeitet werden, sind -- äh -- gewöhnungsbedürftig.

Verfasst: Samstag 30. Januar 2010, 17:44
von min
Danke ist für mich Antwort genug.

Verfasst: Sonntag 31. Januar 2010, 16:26
von min
Ich meine gehört zu haben, dass man über DirectX eine bessere Performance kriegen müsste. Des weiteren habe ich bei einer Suche im Internet gesehen, dass Python mit DirectX zusammenarbeiten kann. Erstmal stimmt das oder bin ich auf einem falschen Weg? Könnte mir vielleicht jemand einen Link geben auf dem die (wichtigsten) Befehle aufgelistet sind. Wäre sehr dankbar.

Verfasst: Sonntag 31. Januar 2010, 16:35
von EyDu
BlackJack hat geschrieben:Anmerkung zum Quelltext: Die Abkürzungen, das neubinden von "Konstanten", und die Art wie die Ereignisse abgearbeitet werden, sind -- äh -- gewöhnungsbedürftig.
Da kommt mir aus einer Vorlesung doch glatt die "variable Lernkonstante" wieder in den Sinn ^^

@min: Ohne dir zu nahe treten zu wollen, aber von dem (wenigen) was ich bisher von dir gesehen habe, würde ich die Finger von DirectX lassen. Das ist noch eine Nummer zu groß. An deiner Stelle würde ich mich erstmal vernünftig in Python und PyGame einarbeiten.

Sebastian

Verfasst: Sonntag 31. Januar 2010, 16:44
von min
Stimmt das Script ist überhaupt nicht gelungen. Nicht nur das sondern eigentlich alle bisher, da sie meistens nur Schnipsel sind. Auf der anderen Seite würde ich mir gerne einer neuen Herausforderung stellen (Learning by Doing).

Verfasst: Sonntag 31. Januar 2010, 16:56
von EyDu
Hallo.

Dann schau dir doch die Seite und die DirectX Dokumentation einfach mal an. Die Funktionalität ist aber wirklich sehr low-level und nicht annähernd so komfortabel wie pygame.

Sebastian

Verfasst: Sonntag 31. Januar 2010, 17:09
von min
Ich verstehe es, dass du so überzeugt bist von Pygame. Aber mit den Performanceproblemen mit denen ich kämpfen muss weicht die Euphorie. Aber an der Grafikkarte oder anderer Hardware kann das eher nicht liegen. Bin über jede Hilfe froh. Es muss nicht DirectX sein.

Verfasst: Sonntag 31. Januar 2010, 18:08
von BlackJack
@min: Musst Du denn wirklich diesen ganzen grossen Bildschirm ständig neuzeichnen? Reicht nicht auch eine kleinere Auflösung? Insbesondere beim Vollbild. Wie sieht's denn aus, wenn Du Hardwarebeschleunigung anforderst? Schau Dir mal die Doku zu `display.set_mode()` an, was man da für Flags übergeben kann.

Ansonsten gäb's noch `pyglet`: http://pyglet.org/

Und man könnte sich natürlich auch mit OpenGL selbst was zusammenbasteln. Das wäre dann aber auch von der Abstraktion eher auf der Stufe von DirectX.

Verfasst: Sonntag 31. Januar 2010, 18:19
von min
Danke für den Tipp. Ich werde ihm vorerst nachgehen. Doch erlaube mir noch eine Frage: wegen den Flags: gibt es eine andere Seite neben der offiziellen Pygame und zu OpenGL, ich wäre sehr dankbar über einen Link zu einem Tutorial für Anfänger.

Verfasst: Sonntag 31. Januar 2010, 18:28
von EyDu
Zumindest bei DirectPython und PyOpenGL kannst du dich an die DirectX und OpenGL Dokumentationen halten. Entsprechend kannst du auch die ganze Menge der umherschwirrenden Tutorials verwenden. Wohl meist in C oder C++. Das sind beides wirklich nur Wrapper, mit eben mal an einem Abend einarbeiten wird das sicher nichts. Und auf der Pygame Seite sind doch nun wirklich genug Tutorials und Dokumentation.

Verfasst: Sonntag 31. Januar 2010, 18:33
von min
Gut werde ich mich dann mit dem Englisch durchquälen müssen. Aber noch mal vielen Dank für die Hilfe.

Verfasst: Sonntag 31. Januar 2010, 19:06
von min
Leider noch eine Frage: Wo könnte man ablesen welche Bildschirmauflösung Pygame bzw. der Monitor annimmt? Es geht mir dabei darum, dass keine scwarzen Streifen Links, Rechts, Oben und Unten entstehen.