Code: Alles auswählen
import pygame, sys
pygame.init()
########################################################################
#-----------------------------------------------------------------------
clock = pygame.time.Clock()
FPS = 60
#-----------------------------------------------------------------------
#Fenster definieren
fenster_Breite = 1280
Fenster_Hoehe = 800
fenster = pygame.display.set_mode((fenster_Breite,Fenster_Hoehe), pygame.DOUBLEBUF)
pygame.display.set_caption("Plattformer")
#-----------------------------------------------------------------------
# Bilder laden #############################################################################
hintergrund = pygame.image.load("Assets/hintergrund.png").convert_alpha()
laufen_rechts = [pygame.image.load("Assets/laufen_rechts/1.png").convert_alpha(), pygame.image.load("Assets/laufen_rechts/2.png").convert_alpha(),pygame.image.load("Assets/laufen_rechts/3.png").convert_alpha(), pygame.image.load("Assets/laufen_rechts/4.png").convert_alpha(), pygame.image.load("Assets/laufen_rechts/5.png").convert_alpha(),
pygame.image.load("Assets/laufen_rechts/6.png").convert_alpha(), pygame.image.load("Assets/laufen_rechts/7.png").convert_alpha(), pygame.image.load("Assets/laufen_rechts/8.png").convert_alpha()]
laufen_links = [pygame.image.load("Assets/laufen_links/1.png").convert_alpha(), pygame.image.load("Assets/laufen_links/2.png").convert_alpha(),pygame.image.load("Assets/laufen_links/3.png").convert_alpha(), pygame.image.load("Assets/laufen_links/4.png").convert_alpha(), pygame.image.load("Assets/laufen_links/5.png").convert_alpha(),
pygame.image.load("Assets/laufen_links/6.png").convert_alpha(), pygame.image.load("Assets/laufen_links/7.png").convert_alpha(), pygame.image.load("Assets/laufen_links/8.png").convert_alpha()]
stehen = [pygame.image.load("Assets/stehen/1.png").convert_alpha(), pygame.image.load("Assets/stehen/2.png").convert_alpha(), pygame.image.load("Assets/stehen/3.png").convert_alpha(), pygame.image.load("Assets/stehen/4.png").convert_alpha(), pygame.image.load("Assets/stehen/5.png").convert_alpha(),
pygame.image.load("Assets/stehen/6.png").convert_alpha(), pygame.image.load("Assets/stehen/7.png").convert_alpha(), pygame.image.load("Assets/stehen/8.png").convert_alpha(), pygame.image.load("Assets/stehen/9.png").convert_alpha(), pygame.image.load("Assets/stehen/10.png").convert_alpha()]
springen = [pygame.image.load("Assets/spieler_springen/1.png").convert_alpha(), pygame.image.load("Assets/spieler_springen/2.png").convert_alpha(),pygame.image.load("Assets/spieler_springen/3.png").convert_alpha(), pygame.image.load("Assets/spieler_springen/4.png").convert_alpha(), pygame.image.load("Assets/spieler_springen/5.png").convert_alpha(),
pygame.image.load("Assets/spieler_springen/6.png").convert_alpha(), pygame.image.load("Assets/spieler_springen/7.png").convert_alpha(), pygame.image.load("Assets/spieler_springen/8.png").convert_alpha()]
############################################################################################
class Spieler(pygame.sprite.Sprite):
def __init__(self, x, y, geschw, breite, hoehe, sprung, spieler_Richtung, schritte_Rechts, schritte_Links):
self.x = x
self.y = y
self.geschw = geschw
self.breite = breite
self.hoehe = hoehe
self.sprung = sprung
self.spieler_Richtung = spieler_Richtung
self.schritte_Rechts = schritte_Rechts
self.schritte_Links = schritte_Links
self.sprung2 = False
def laufen (self, liste):
if liste[0]:
self.x -= self.geschw
self.spieler_Richtung = [1,0,0,0]
self.schritte_Links += 1
if liste[1]:
self.x += self.geschw
self.spieler_Richtung = [0,1,0,0]
self.schritte_Rechts += 1
def resetSchritte (self):
self.schritte_Links = 0
self.schritte_Rechts = 0
def stehen( self ):
self.spieler_Richtung = [0,0,1,0]
self.resetSchritte()
def sprungSetzen( self ):
if self.sprung == -16:
self.sprung2 = True
self.sprung = 15
def springen( self ):
if self.sprung2:
self.spieler_Richtung = [0, 0, 0, 1]
if self.sprung >= -15 :
n = 1
if self.sprung < 0 :
n = -1
self.y -= (self.sprung ** 2) * 0.25 * n
self.sprung -= 1
else:
self.sprung2 = False
def spieler_zeichnen( self ):
if self.schritte_Rechts == 63 : # nach 63 schritte beginnt die Animation von vorne
self.schritte_Rechts = 0
if self.schritte_Links == 63 :
self.schritte_Links = 0
# Zeichnet den Spieler mit den entsprechenden Animationsbildern
# Teilen durch 8 sorgt dafür, dass die Anomation in einem langsameren Tempo durchgeht.
# % len(laufen_rechts), % len(laufen_links), % len(stehen) stellt sicher, dass der Zähler innerhalb des gültigen Bereichs für die Anzahl der Bilder bleibt.
# Das % (Modulo) -Operator gibt den Rest der Division zurück. In diesem Fall wird der Zähler nach der Division durch 8 auf den Rest bezogen,
# um den aktuellen Frame-Index zu erhalten. Das hilft, sicherzustellen, dass der Index nicht außerhalb des Bereichs der verfügbaren Bilder liegt.
if self.spieler_Richtung == [0] :
aktueller_Frame = (self.schritte_Rechts // 8) % len(laufen_rechts) # geteilt durch 8, weil ich 8 Bilder in der Datei hab für die Animation
fenster.blit(laufen_rechts[aktueller_Frame], (self.x, self.y))
if self.spieler_Richtung == [1] :
aktueller_Frame = (self.schritte_Links // 8) % len(laufen_links)
fenster.blit(laufen_links[aktueller_Frame], (self.x, self.y))
if self.spieler_Richtung == [2] :
fenster.blit(stehen,(self.x, self.y))
if self.spieler_Richtung == [3] :
fenster.blit(springen,(self.x, self.y))
def zeichnen():
fenster.blit(hintergrund, (0, 0))
spieler1.spieler_zeichnen()
pygame.display.update()
# Rechteckerstellung, damit der Player mit dem Rechteck kolidiert und nicht aus dem Bildschirm läuft
linkewand = pygame.draw.rect(fenster, (0,0,0), (-2,0,2,800), 0 )
rechtewand = pygame.draw.rect(fenster, (0,0,0), (1281,0,2,800), 0)
#-----------------------------------------------------------------------
#HintergrundMusik
musik = pygame.mixer.music.load("Assets/hintergrundMusik.wav")
pygame.mixer.music.play(-1) # -1 damit die Musik dauerhaft läuft
pygame.mixer.music.set_volume(0.03) #Somit stellt man die Lautstärte auf 50%
#------------------------------------------------------------------------
# Spieler als Objekt erstellen. Die Angaben in der Klasse stehen in der Klasse.
spieler1 = Spieler(250, 650, 5, 120 ,140, -16, [0,0,1,0], 0,0)
#########################################################################
run = True
while run:
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
spielerRechteck = pygame.Rect(spieler1.x, spieler1.y, 120, 140)
keys = pygame.key.get_pressed()
if keys[pygame.K_RIGHT] and spieler1.x + 120 < fenster_Breite:
spieler1.laufen([0,1,0,0])
elif keys[pygame.K_LEFT] and spieler1.x > 0:
spieler1.laufen([1,0,0,0])
else:
spieler1.stehen()
(spieler1.stehen())
if keys[pygame.K_UP]:
spieler1.sprungSetzen()
if keys[pygame.K_RIGHT] and keys[pygame.K_LSHIFT] and spieler1.x + 120 < fenster_Breite:
spieler1.laufen([0,1])
if keys[pygame.K_LEFT] and keys[pygame.K_LSHIFT]and spieler1.x > 0:
spieler1.laufen([1,0])
spieler1.springen()
zeichnen()
clock.tick(FPS)
pygame.mixer.music.stop()
pygame.quit()[code]
[b]
Mein Spieler wird im Spiel nicht angezeigt. Die Bilder werden richtig geladen. Wenn ich spieler1.stehen() in der Schleife auf Print setze, dann kommt None in der Konsole raus. Dasselbe gilt auch für die anderen sachen.
Gibt es vielleicht noch eine andere Lösung eine Figur zu animieren ?
[/b]