pygame

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.
Antworten
Tim0123
User
Beiträge: 24
Registriert: Mittwoch 10. Februar 2021, 14:35

Hallo, wenn ich dieses Programm ausführe sehe ich einen Bildschirm mit dem Spieler in der Mitte. Aber ich kann diesen Spieler nicht bewegen. Kann mir da jemand helfen? Ich mache noch nicht so lange pygame.
Main Klasse:

Code: Alles auswählen

import pygame, sys, time
from player import Player
from settings import *

class Game():
	def __init__(self):
		#setup
		pygame.init()
		self.display_surface = pygame.display.set_mode((WINDOW_WIDTH,WINDOW_HEIGHT))
		pygame.display.set_caption('Space Invader')
		self.clock = pygame.time.Clock()
		player_sprite = Player((400, 500))

		# sprite groups
		self.player = pygame.sprite.GroupSingle(player_sprite)

	def run(self):
		last_time = time.time()
		while True:
			# delta time
			dt = time.time() - last_time
			last_time = time.time()

			#event loop
			for event in pygame.event.get():
				if event.type == pygame.QUIT:
					pygame.quit()
					sys.exit()

			# game logic
			self.display_surface.fill(GREY)
			self.player.update()
			self.player.draw(self.display_surface)
			pygame.display.update()
			self.clock.tick(FRAMERATE)

if __name__ == '__main__':
	game = Game()
	game.run()
Player Klasse:

Code: Alles auswählen

import pygame
from settings import *

class Player(pygame.sprite.Sprite):
	def __init__(self,pos):
		super().__init__()
		self.image = pygame.image.load('../graphics/player.png')
		self.rect = self.image.get_rect(midbottom = pos)
		self.speed = 5

	# keyboard input
	def get_input(self):
		keys = pygame.key.get_pressed()

		if keys[pygame.K_RIGHT]:
			self.rect.x += self.speed
		if keys[pygame.K_LEFT]:
			self.rect.x -= self.speed

		def update(self):
			self.get_input()
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Du integrierst die get_input-Methode ja auch nicht in deinen event loop. Da ist nirgendwo ein get_input-Aufruf. Wie soll der sich also bewegen?
Benutzeravatar
/me
User
Beiträge: 3561
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Du hast da einen Fehler mit der Einrückung in deiner Player-Klasse. update ist als Funktion innerhalb der Methode get_input definiert und nicht als eigene Methode von Player. Wenn du jetzt in deinem anderen Programmteil self.player.update() aufrufst, dann existiert in der Player-Klasse kein update und damit wird dann das update aus der abgeleiteten Klasse `pygame.sprite.Sprite` verwendet. Das tut aber nichts für dich sinnvolles.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Und noch mehr Probleme: self.player ist eine SpritGroup. Das ist Unsinn. An der Stelle will man ja nun direkt das Player-Objekt haben.
Antworten