Seite 1 von 1
'int' object has no attribute
Verfasst: Sonntag 27. Juni 2021, 16:54
von norgsmen
Hallo Leute,
ich bin gerade dabei ein Spiel anhand eines Tutorials nachzubauen. Leider hat sich nun aber ab einer gewissen Stelle ein Fehler eingeschlichen.
Ich habe die Schritte fast alle eins zu eins aus dem Tutorial übernommen und bin deshalb echt Ratlos.. Bitte um Hilfe:D
Fehlermeldung:
self.game.screen.blit(self.bullet_img, (self.x,self.y))
AttributeError: 'int' object has no attribute 'screen'
Danke für die Hilfe!
Re: 'int' object has no attribute
Verfasst: Sonntag 27. Juni 2021, 16:57
von __deets__
Bitte den gesamten Code zeigen, anhand dieser zwei Zeilen kann niemand erkennen, woher self.game kommt.
Re: 'int' object has no attribute
Verfasst: Sonntag 27. Juni 2021, 17:33
von norgsmen
Hier der gesamte Code:
import pygame
class Game:
def __init__(self, width, height):
pygame.init()
self.width = width
self.height = height
self.screen = pygame.display.set_mode((self.width,self.height))
pygame.display.set_caption("intiwaisor")
self.clock = pygame.time.Clock()
self.running = True
self.spaceshipe = Spaceshipe(self,370,515)
self.background_img = pygame.image.load("spr_space_himmel.png")
while self.running:
self.clock.tick(60)
#self.screen.fill((200, 22, 120))
self.screen.blit(self.background_img, (0,0))
for event in pygame.event.get():
if event.type == pygame.QUIT:
self.running = False
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
self.spaceshipe.move(-10)
if event.key == pygame.K_RIGHT:
self.spaceshipe.move(10)
if event.key == pygame.K_SPACE:
self.spaceshipe.fire_bullet()
if event.type == pygame.KEYUP:
if event.key == pygame.K_LEFT:
self.spaceshipe.move(10)
if event.key == pygame.K_RIGHT:
self.spaceshipe.move(-10)
self.spaceshipe.update()
if len(self.spaceshipe.bullets) > 0:
for bullet in self.spaceshipe.bullets:
if bullet.is_fired == True:
bullet.update()
pygame.display.update()
class Spaceshipe:
def __init__(self,game,x,y):
self.x = x
self.y = y
self.change_x = 0
self.game = game
self.raumschiff_img = pygame.image.load("spr_spaceship.png")
self.bullets = []
def fire_bullet(self):
self.bullets.append(Bullet(self.game,self.x,self.y))
self.bullets[len(self.bullets) -1].fire()
def move(self, speed):
self.change_x += speed
def update(self):
self.x += self.change_x
if self.x < 0:
self.x = 0
elif self.x > 736:
self.x = 736
self.game.screen.blit(self.raumschiff_img ,(self.x,self.y))
class Bullet:
def __init__(self, x,y, game):
self.x = x
self.y = y
self.game = game
self.is_fired = False
self.bullet_speed = 10
self.bullet_img = pygame.image.load("spr_patrone.png")
def fire(self):
self.is_fired = True
def update(self):
self.game.screen.blit(self.bullet_img, (self.x,self.y))
if __name__ == "__main__":
game = Game(800,600)
Re: 'int' object has no attribute
Verfasst: Sonntag 27. Juni 2021, 17:52
von __blackjack__
@norgsmen: Schau Dir mal an was `Bullet.__init__()` in welcher Reihenfolge erwartet und was Du stattdessen übergibst.
Re: 'int' object has no attribute
Verfasst: Sonntag 27. Juni 2021, 19:33
von norgsmen
__blackjack__ hat geschrieben: Sonntag 27. Juni 2021, 17:52
@norgsmen: Schau Dir mal an was `Bullet.__init__()` in welcher Reihenfolge erwartet und was Du stattdessen übergibst.
Dort wurde doch einmal der Parameter x,y und game übergeben und das habe ich doch dann auch in der Klasse weiter unten angegeben oder nicht?
Re: 'int' object has no attribute
Verfasst: Sonntag 27. Juni 2021, 20:01
von ThomasL
Das ist Kraut und Rüben.
Die Klasse Bullet ist so definiert:
und dann wird eine Instanz so erzeugt:
Re: 'int' object has no attribute
Verfasst: Sonntag 27. Juni 2021, 20:16
von norgsmen
ThomasL hat geschrieben: Sonntag 27. Juni 2021, 20:01
Das ist Kraut und Rüben.
Die Klasse Bullet ist so definiert:
und dann wird eine Instanz so erzeugt:
Was ist aber daran falsch?
Re: 'int' object has no attribute
Verfasst: Sonntag 27. Juni 2021, 20:44
von rogerb
Die Reihenfolge ist falsch.
Die __init__() - Methode erwartet die Eingangsparameter in dieser Reihenfolge: x, y, game
In der Klassen - Instanzierung übergibst du sie aber in dieser Reihenfolge: self.game, self.x, self.y
Die Instanzvariable 'self.game' erhält dann fälschlicherweise den Integerwert von self.y
Das führt in dieser Zeile:
Code: Alles auswählen
self.game.screen.blit(self.bullet_img, (self.x, self.y))
zu diesem Fehler:
AttributeError: 'int' object has no attribute 'screen'
Re: 'int' object has no attribute
Verfasst: Sonntag 27. Juni 2021, 20:46
von norgsmen
rogerb hat geschrieben: Sonntag 27. Juni 2021, 20:44
Die Reihenfolge ist falsch.
Die __init__() - Methode erwartet die Eingangsparameter in dieser Reihenfolge: x, y, game
In der Klassen - Instanzierung übergibst du sie aber in dieser Reihenfolge: self.game, self.x, self.y
Die Instanzvariable 'self.game' erhält dann fälschlicherweise den Integerwert von self.y
Das führt in dieser Zeile:
Code: Alles auswählen
self.game.screen.blit(self.bullet_img, (self.x, self.y))
zu diesem Fehler:
AttributeError: 'int' object has no attribute 'screen'
Endlich funktioniert es. Danke euch vielmals!!