Pygame, Python 2.7, AttributeError: type object 'newPlayer' hat kein Attribut 'rect', aber als ich erklärte, dass eine rect-Attribut
Also ich mache ein Spieler-Objekt in pygame, und ich hatte eine sprite-loader zu laden, bis das Bild, das Objekt zu haben, das Bild, und bekomme ein rectangle-Objekt von ihm.
Jedoch, wenn ich versuche, es zu testen in Haupt-ich bekomme diese Fehlermeldung
AttributeError: type object 'newPlayer' has no attribute 'rect'
Aber ich habe diese Zeile in meine newPlayer Klasse
self.rect = self.image.get_rect()
Was ist Los? Ich hatte fast identische code mit den anderen Objekten im Spiel, und Sie funktionierte ohne Problem.
Vollständige code:
import pygame
# Define some colors
black = ( 0, 0, 0)
white = ( 255, 255, 255)
red = ( 255, 0, 0)
#initialize pygame
pygame.init()
#set the height and width of the screen
width = 800
height = 480
mainScreen = pygame.display.set_mode([width,height])
#A list of all of the sprites in the game
all_sprites_list = pygame.sprite.Group()
def sprite_sheet_load(colorKey, spriteLocX, spriteLocY, spriteSizeX, spriteSizeY, fileName):
'''Purpose: to extract a sprite from a sprite sheet at the chosen location'''
'''credit to SO user hammyThePig for original code'''
sheet = pygame.image.load(fileName).convert() #loads up the sprite sheet. convert makes sure the pixel format is coherent
sheet.set_colorkey(colorKey) #sets the color key
sprite = sheet.subsurface(pygame.Rect(spriteLocX, spriteLocY, spriteSizeX, spriteSizeY)) #grabs the sprite at this location
return sprite
class newPlayer(pygame.sprite.Sprite):
'''class that builds up the player'''
#constructor function
def __init__(self): #create a self variable to do stuff
#call up the parent's constructor
pygame.sprite.Sprite.__init__(self)
img = "mainCharacterFinal.png"
#size of each sprite
sprite_sizeX = 35
sprite_sizeY = 37
#List of images for different types of movement
self.imagesLeft = []
self.imagesRight = []
self.imagesUp = []
self.imagesDown = []
#these two variables go and help reset the position variables of the sprites
xInit = 35
yInit = 37
#inital positions of sprites on the sheet
positionX = 0
positionY = 0
colorKey = white #colorKey to pass to the function
self.imagesUp.append(sprite_sheet_load(black, positionX, positionY, sprite_sizeX, sprite_sizeY, img))
#the best image to use by default is the one that has the player facing the screen.
self.image=self.imagesUp[0]
self.rect = self.image.get_rect()
newplayer = newPlayer()
all_sprites_list.add(newplayer)
newPlayer.rect.x = 300
newPlayer.rect.y = 300
#a conditional for the loop that keeps the game running until the user Xes out
done = False
#clock for the screen updates
clock = pygame.time.Clock()
while done==False:
for event in pygame.event.get(): #user did something
if event.type == pygame.QUIT: #if the user hit the close button
done=True
mainScreen.fill(white)#makes the background white, and thus, the white part of the images will be invisible
#draw the sprites
all_sprites_list.draw(mainScreen)
#limit the game to 20 fps
clock.tick(20)
#update the screen on the regular
pygame.display.flip()
pygame.quit()
- Poste bitte die vollständigen traceback. Wir müssen wissen, welche der rund 100 Zeilen verursachen den Fehler.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Schreiben Sie
anstelle von newPlayer in den jeweiligen Ort. Dies ist, weil rect ist Attribut der Instanz der Klasse und nicht die Klasse selbst, wenn Sie versuchen zu schreiben
Sie versuchen, Zugriff auf die rect-Attribut von newPlayer Klasse, was nicht da ist, so haben Sie zu schreiben
versuchen
Überprüfen Sie die folgende link:-
Python: Unterschied zwischen Klasse und Instanz-Attribute