Seite 1 von 1

pygame

Verfasst: Samstag 9. April 2022, 14:48
von Tim0123
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()

Re: pygame

Verfasst: Samstag 9. April 2022, 14:56
von __deets__
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?

Re: pygame

Verfasst: Samstag 9. April 2022, 14:59
von /me
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.

Re: pygame

Verfasst: Samstag 9. April 2022, 15:02
von __deets__
Und noch mehr Probleme: self.player ist eine SpritGroup. Das ist Unsinn. An der Stelle will man ja nun direkt das Player-Objekt haben.