PyGame: Suche Hilfe und Tips

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Erwin
User
Beiträge: 141
Registriert: Donnerstag 9. Juni 2005, 08:51

Dienstag 14. Juni 2005, 17:17

Hoffe es gehört (zumindest vorerst) hierher.

Folgendes:
Mein Interssen sind eher Spiele zu proggramieren.
Und für solche soll eben PyGame am besten geeignet sein, wenn meine Informationen nicht täuschen.

Das Problem:
Fehlende Seiten, Fehlendes Wissen darüber und ... schlechte Englischkenntnisse.

Das suche ich:
- Deutsche Seiten, wo einiges darüber erklärt wird.
- Sonstige Infos? Z.B. sind die Grundaufrufen gleich, wie bei Tkinter, nur eben andere Bezeichnungen?
- weiter Fragen ect., welche sich aber erst später ergeben werden. Zur Zeit ... will ich überhaupt mal was machen können.

Installation habe ich inzwischen dank Hilfe, schon hinbekommen.

Danke für Eure Hilfe im vorraus.
Ich mache nie einen Fehler Zweimal.
Schließlich ist die Auswahl ja groß genug.
antimicro
User
Beiträge: 151
Registriert: Sonntag 29. Februar 2004, 16:24

Dienstag 14. Juni 2005, 22:10

Hi,
auch wenn du das vielleicht nicht hören möchtest, aber ohne Englisch hast du wenig’ Chancen. Mein Vorschlag: Einfach mal die Englische Doku ausprobieren! Langenscheidt daneben legen und Stück für Stück übersetzen. Du wirst sehen, dass die ersten Programme mühsam sind, aber es wird auch immer einfacher. Außerdem hat niemand behauptet programmieren sei einfach…

und sollten trotzdem mal Probleme auftauchen, dann kannst du hier ja Fragen.
greetings
sebi
BlackJack

Dienstag 14. Juni 2005, 22:48

Erwin hat geschrieben:Das suche ich:
- Deutsche Seiten, wo einiges darüber erklärt wird.
- Sonstige Infos? Z.B. sind die Grundaufrufen gleich, wie bei Tkinter, nur eben andere Bezeichnungen?
Wenn Du damit meinst, ob Funktions-/Methodenaufrufe auch aus dem Namen mit folgenden Klammern und eventuell Parametern dazwischen bestehen, dann ja. :wink:

PyGame ist kein GUI Toolkit sondern eher auf niedrigerer Ebene angesiedelt. Du bekommst im Grunde eine Zeichenfläche zur Vefügung auf der Du beliebige Grafiken platzieren kannst und Funktionen an die Hand, um Maus, Joystick und Tastatur auszuwerten und Töne/Musik in mehreren Kanälen abzuspielen. Und ein paar nützliche Funktionen um Grafiken zu manipulieren und Rechtecke auf Überlappungen oder "enthalten sein" zu überprüfen. Ausserdem ein paar Basisklassen um so etwas wie Sprites umzusetzen. Dazu ist Objektorientierung ein wichtiger Punkt.
Erwin
User
Beiträge: 141
Registriert: Donnerstag 9. Juni 2005, 08:51

Dienstag 14. Juni 2005, 23:28

Also ein paar Seiten hatte ich teilweise inzwischen schon verstanden.
Zumindest ist mir es gelungen, mit PyGame ein Fenster (640x480) zu erstellen. Aber das war es dann schon, bzw. als ich das Fenster schließen wollte, teilte mir das BS (Windows XP) mit, daß das Programm nicht reagiert und fragte, ob es sofort beenden soll.
Ich mache nie einen Fehler Zweimal.
Schließlich ist die Auswahl ja groß genug.
ProgChild
User
Beiträge: 210
Registriert: Samstag 9. April 2005, 10:58
Kontaktdaten:

Mittwoch 15. Juni 2005, 09:57

Wie wärs mit ner kleinen Starthilfe? Für jemanden der noch nie mit der SDL gearbeitet hat, finde ich die Doku, die ich gefunden hab nämlich nicht so toll.

Code: Alles auswählen

#!/usr/bin/env python
import pygame

def main():
	print "Los gehts"

	pygame.init()
	pygame.display.init()
	
	screen = pygame.display.set_mode( (640,480) )
	pygame.display.set_caption( "Fenster Titel" )

	running = 1
	while running:
		events = pygame.event.get()
		for event in events:
			#print event
			if event.type == pygame.QUIT: 
				running = 0

			if event.type == pygame.KEYDOWN:
				print "Taste wurde gedrückt"
			
		pygame.display.flip()

	pygame.display.quit()

	print "Bye"

if __name__ == "__main__":
	main()

Erwin
User
Beiträge: 141
Registriert: Donnerstag 9. Juni 2005, 08:51

Mittwoch 15. Juni 2005, 14:28

Danke, ProgChild.
Dein Beispiel hat funktioniert.
Aber es gab beim Abspeichern eine Meldung und nach bestätigung hat er mir folgende Zeile reingeschrieben:

Code: Alles auswählen

# -*- coding: cp1252 -*-
Was hat es damit auf sich?

Und was mich auch interessieren würde.
Warum klappt der kopierte Beispiel-Code nicht, bzw. hängt sich auf:

Code: Alles auswählen

#!/usr/bin/python

import pygame
from pygame.locals import *

def main():
	# Initialise screen
	pygame.init()
	screen = pygame.display.set_mode((150, 50))
	pygame.display.set_caption('Basic Pygame program')

	# Fill background
	background = pygame.Surface(screen.get_size())
	background = background.convert()
	background.fill((250, 250, 250))

	# Display some text
	font = pygame.font.Font(None, 36)
	text = font.render("Hello There", 1, (10, 10, 10))
	textpos = text.get_rect()
	textpos.centerx = background.get_rect().centerx
	background.blit(text, textpos)

	# Blit everything to the screen
	screen.blit(background, (0, 0))
	pygame.display.flip()

	# Event loop
	while 1:
		for event in pygame.event.get():
			if event.type == QUIT:
				return

		screen.blit(background, (0, 0))
		pygame.display.flip()


if __name__ == '__main__': main()
Ich mache nie einen Fehler Zweimal.
Schließlich ist die Auswahl ja groß genug.
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Mittwoch 15. Juni 2005, 14:38

Erwin hat geschrieben:Aber es gab beim Abspeichern eine Meldung und nach bestätigung hat er mir folgende Zeile reingeschrieben:

Code: Alles auswählen

# -*- coding: cp1252 -*-
Was hat es damit auf sich?
Weil es sonst Probleme mit dem ü-Umlaut in 'gedrückt' gibt, Python weiß nicht, welches Encoding das sein soll.
Erwin hat geschrieben:Und was mich auch interessieren würde.
Warum klappt der kopierte Beispiel-Code nicht, bzw. hängt sich auf:
Tut's doch nicht:

Code: Alles auswählen

#!/usr/bin/env python
# -*- encoding: latin-1 -*-

import pygame
from pygame.locals import *

def main():
    # Initialise screen
    pygame.init()
    screen = pygame.display.set_mode((150, 50))
    pygame.display.set_caption('Basic Pygame program')

    # Fill background
    background = pygame.Surface(screen.get_size())
    background = background.convert()
    background.fill((250, 250, 250))

    # Display some text
    font = pygame.font.Font(None, 36)
    text = font.render("Hello There", 1, (10, 10, 10))
    textpos = text.get_rect()
    textpos.centerx = background.get_rect().centerx
    background.blit(text, textpos)

    # Blit everything to the screen
    screen.blit(background, (0, 0))
    pygame.display.flip()

    # Event loop
    while True:
        for event in pygame.event.get():
            if event.type == QUIT:
                return

        screen.blit(background, (0, 0))
        pygame.display.flip()

if __name__ == '__main__':
    main()
Was ich gemacht habe: Einrückung nach meinem Coding-Stil (siehe Styleguide) korrgiert, Kopfzeilen umgeschreiben, 1 gegen True eingetauscht. Funktioniert beim ersten mal ohne jegliche Fehler.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Erwin
User
Beiträge: 141
Registriert: Donnerstag 9. Juni 2005, 08:51

Mittwoch 15. Juni 2005, 15:09

Wegem Umlaut also ... .
Leonidas hat geschrieben:...
Was ich gemacht habe: Einrückung nach meinem Coding-Stil (siehe Styleguide) korrgiert, Kopfzeilen umgeschreiben, 1 gegen True eingetauscht. Funktioniert beim ersten mal ohne jegliche Fehler.
Sehe nur eine Veränderung: Die 2. Zeile.
Habe den ganze Code kopiert und ausprobiert:
Beim beenden heißt es immer noch, daß das Programm nicht reagiert (also BS-Mitteilung).
Ich mache nie einen Fehler Zweimal.
Schließlich ist die Auswahl ja groß genug.
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Mittwoch 15. Juni 2005, 15:18

Okay, dann genauer:
  • aus

    Code: Alles auswählen

    #!/usr/bin/python
    habe ich

    Code: Alles auswählen

    #!/usr/bin/env python
    # -*- encoding: latin-1 -*- 
    gemacht, damit habe ich also erstmal den Interpreter nicht mehr auf einen festen Pfad. Danach habe ich das Encoding auf latin-1 gesetzt. Das mache ich aus gewöhnung, weil man damit gleich mal einige Fehler ausmerzen kann.
  • ich habe den Quelltext komplett neu eingerückt, wobei ich gegebenfalls vorhandene Tabs gegen 4 Leerzeichen getauscht habe.
  • aus

    Code: Alles auswählen

    while 1:
    wurde bei mir

    Code: Alles auswählen

    while True:[/url] weil mir das logischer erscheint (aber zu while 1 aquivalent ist).[/list]
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Erwin
User
Beiträge: 141
Registriert: Donnerstag 9. Juni 2005, 08:51

Mittwoch 15. Juni 2005, 19:23

Ok. jetzt weiß ich die Änderungen genau. Danke.
Aber es funktioniert immer noch nicht richtig. Das Fenster hängt sich ständig auf.
:(
Ich mache nie einen Fehler Zweimal.
Schließlich ist die Auswahl ja groß genug.
BlackJack

Mittwoch 15. Juni 2005, 21:05

Das Skript hat den Fehler, das nirgends `pygame.quit()` aufgerufen wird und somit auch PyGame nicht ordentlich beendet wird. Das macht nichts wenn man das Skript wirklich als eigenständiges Programm startet, weil dann das Interpreterende auch PyGame beendet. Wenn man das Skript aber aus IDLE oder IPython oder einer ähnlichen Umgebung heraus startet, dann bleibt der Interpreter "am Leben" und der PyGame Teil hängt. In der Python-Shell manuell `pygame.quit()` eintippen sollte helfen.
Erwin
User
Beiträge: 141
Registriert: Donnerstag 9. Juni 2005, 08:51

Mittwoch 15. Juni 2005, 21:58

BlackJack hat geschrieben:Das Skript hat den Fehler, das nirgends `pygame.quit()` aufgerufen wird und somit auch PyGame nicht ordentlich beendet wird. Das macht nichts wenn man das Skript wirklich als eigenständiges Programm startet, weil dann das Interpreterende auch PyGame beendet. Wenn man das Skript aber aus IDLE oder IPython oder einer ähnlichen Umgebung heraus startet, dann bleibt der Interpreter "am Leben" und der PyGame Teil hängt. In der Python-Shell manuell `pygame.quit()` eintippen sollte helfen.
Genau das war der Fehler.
Danke.
Als eigenständiges Programm?
Also als Exe.Datei?
Aber für ein Turitoral ist dies ein unverzeichlicher Fehler, finde ich (es sei denn, es wird wo in Englisch erwähnt ... ?).

Jedenfalls habe ich jetzt wieder etwas Hoffnung.
Ich mache nie einen Fehler Zweimal.
Schließlich ist die Auswahl ja groß genug.
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Donnerstag 16. Juni 2005, 12:37

Erwin hat geschrieben:Als eigenständiges Programm?
Also als Exe.Datei?
Ich denke BlackJack meint, dass das Programm vom Pythoninterpreter direkt ausgeführt wird (also ohne IDLE oder IPython oder so), so wie bei einem Doppelklick auf das Programm oder einem Start mit 'python programm.py'.

BlackJack: Toll, darauf wäre ich nicht gekommen, Respekt!
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Erwin
User
Beiträge: 141
Registriert: Donnerstag 9. Juni 2005, 08:51

Donnerstag 16. Juni 2005, 13:04

Leonidas hat geschrieben:...
Ich denke BlackJack meint, dass das Programm vom Pythoninterpreter direkt ausgeführt wird (also ohne IDLE oder IPython oder so),...
Achja, die Möglichkeit gibt es ja auch noch; stimmt.
Habe es getestet.
Ohne dem Idle funktioniert es dann auch ohne der Beendenzeile (pygame.quit()).
Also braucht man es nur, wenn man mit der Idle arbeitet?

Wieder eine, aber nur kleine, Hürde genommen.
Es werden vermutlich noch mehre Fragen auftauchen.
Zwar habe ich eine Möglichkeit gefunden, die vielen englischen Texte übersetzen zu lassen, aber zum einen ist die Gramatik fürchterlich, zum anderem werden auch die Befehle leider gleich mit übersetzt.
Ich mache nie einen Fehler Zweimal.
Schließlich ist die Auswahl ja groß genug.
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Donnerstag 16. Juni 2005, 13:31

Erwin hat geschrieben:Achja, die Möglichkeit gibt es ja auch noch; stimmt.
Habe es getestet.
Ohne dem Idle funktioniert es dann auch ohne der Beendenzeile (pygame.quit()).
Also braucht man es nur, wenn man mit der Idle arbeitet?
Es hinzuzufügen ist sowieso ratsam, egal ob man nun mit IDLE arbeitet oder nicht, schaden tuts nicht.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Gesperrt