Hier ist der Code:
Code: Alles auswählen
# Importieren der Pygame-Bibliothek
import pygame
# initialisieren von pygame
pygame.init()
print("---- Initialisierung gestartet -----")
print()
print()
# Displayerkennung
print("---- Displayerkennung gestartet -----")
aufloesung = pygame.display.Info()
print("Auflösung: ", aufloesung.current_w, " x ", aufloesung.current_w)
print()
# Gamepaderkennung
print("---- Gamepads werden gesucht -----")
if pygame.joystick.get_count() > 0:
joystick_0 = pygame.joystick.Joystick (0)
joystick_0.init()
print("Gamepad(s) erkannt")
print("Anzahl: ", pygame.joystick.get_count())
print()
name = joystick_0.get_name()
print("Gamepad 1: ", name)
print()
print()
else:
print("KEIN Gamepad gefunden")
print()
print()
print("---- Spiel wurde gestartet -----")
print()
# Grafiken laden und zuweisen
bg_original = pygame.image.load("Grafik/map.png")
bg = pygame.transform.scale(bg_original, (aufloesung.current_w * 12, aufloesung.current_w * 12))
### Musik/Soundeffekte einrichten
##pygame.mixer.music.load('**************')
##pygame.mixer.music.play(-1,0.0)
##pygame.mixer.music.set_volume(.1)
# Fenster öffnen
screen = pygame.display.set_mode((0,0), pygame.FULLSCREEN)
# Titel für Fensterkopf
pygame.display.set_caption("********** by Marco Hutzfeld")
# solange die Variable True ist, soll das Spiel laufen
spielaktiv = True
# Bildschirm Aktualisierungen einstellen
clock = pygame.time.Clock()
# Klassen erstellen
class Spieler ():
def __init__ (self, x, y, leben):
self.x = x
self.y = y
self.leben = leben
img = pygame.image.load("Grafik/Link/Link.png")
self.image = pygame.transform.scale(img, (32, 54))
self.rect = self.image.get_rect()
def update(self):
self.richtung = [0, 0, 0, 0, 0]
self.schritte_oben = 0
self.schritte_links = 0
self.schritte_unten = 0
self.schritte_rechts = 0
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_w:
print("Figur hoch w")
self.richtung = [1, 0, 0, 0, 0]
self.schritte_oben += 1
elif event.key == pygame.K_a:
print("Figur links a")
self.richtung = [0, 1, 0, 0, 0]
self.schritte_links += 1
img = pygame.image.load("Grafik/Link/Link_Links.png")
self.image = pygame.transform.scale(img, (32, 54))
self.rect = self.image.get_rect()
elif event.key == pygame.K_s:
print("Figur runter s")
self.richtung = [0, 0, 1, 0, 0]
self.schritte_unten += 1
img = pygame.image.load("Grafik/Link/unten1.png")
self.image = pygame.transform.scale(img, (32, 54))
self.rect = self.image.get_rect()
elif event.key == pygame.K_d:
print("Figur rechts d")
self.richtung = [0, 0, 0, 1, 0]
self.schritte_rechts += 1
img = pygame.image.load("Grafik/Link/Link.png")
self.image = pygame.transform.scale(img, (32, 54))
self.rect = self.image.get_rect()
screen.blit (self.image, (self.x, self.y))
class Karte ():
def __init__ (self, x, y, bewegen_x, bewegen_y, geschw):
img = pygame.image.load("Grafik/map.png")
self.image = pygame.transform.scale(img, (aufloesung.current_w * 12, aufloesung.current_w * 12))
self.rect = self.image.get_rect()
self.x = x
self.y = y
self.bewegen_x = bewegen_x
self.bewegen_y = bewegen_y
self.geschw = geschw
def update(self):
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_w:
print("Karte w gedrückt")
self.bewegen_y += self.geschw
elif event.key == pygame.K_s:
print("Karte s gedrückt")
self.bewegen_y -= self.geschw
elif event.key == pygame.K_a:
print("Karte a gedrückt")
self.bewegen_x += self.geschw
elif event.key == pygame.K_d:
print("Karte d gedrückt")
self.bewegen_x -= self.geschw
if event.type == pygame.KEYUP:
if event.key == pygame.K_w:
print("Karte w losgelassen")
self.bewegen_y = 0
elif event.key == pygame.K_s:
print("Karte s losgelassen")
self.bewegen_y = 0
elif event.key == pygame.K_a:
print("Karte a losgelassen")
self.bewegen_x = 0
elif event.key == pygame.K_d:
print("Karte d losgelassen")
self.bewegen_x = 0
if self.bewegen_x != 0:
self.x += self.bewegen_x
if self.bewegen_y != 0:
self.y += self.bewegen_y
if self.x >= -120:
self.bewegen_x = 0
self.x = -120
if self.y >= -400:
self.bewegen_y = 0
self.y = -400
screen.blit (self.image, (self.x, self.y))
def main():
spieler1 = Spieler(aufloesung.current_w // 2, aufloesung.current_h // 2, 3)
karte1 = Karte(-500, -500, 0, 0, 2)
# Schleife Hauptprogramm
while spielaktiv:
karte1.update()
spieler1.update()
# Fenster aktualisieren
pygame.display.flip()
# Refresh-Zeiten festlegen
clock.tick(60)
pygame.quit()
quit()
if __name__ == '__main__':
main()
Nun zu meinem Problem:
Ich möchte mit den Tasten w,a,s,d sowohl die Karte im Hintergrund verschieben, als auch die Anzeige für die Figur verändern. Die Figur bleibt dafür immer in der Mitte des Bildschirmes stehen.
Später wird die Figur dann animiert und tut nur so, als würde sie laufen.
Hoffe es ist verständlich, was ich meine.
Im Hauptprogramm rufe ich dafür die entsprechenden Methoden ab.
Doch das Problem ist, dass Tastaturabfragen sehr oft verschluckt werden. Entweder verändert sich die Figur nicht, oder die Karte nicht.
Das Problem habe ich erst, seit ich Klassen nutze.
Wo ist mein Fehler?
Ich könnte die Figur auch in der Kartenklasse ändern, aber das wäre ja auch nicht Sinn der Sache.....