Pygame,Python 2.7,AttributeError:类型对象'newPlayer'没有属性"rect",但我声明了一个rect属性



所以我在pygame中制作了一个玩家对象,我让一个精灵加载器加载图像,将对象设置为具有该图像,并获取它的矩形对象。

但是,当我尝试在 main 中测试它时,我收到此错误

AttributeError: type object 'newPlayer' has no attribute 'rect'

但是我的新播放器类中有这一行

self.rect = self.image.get_rect()

这是怎么回事? 我与游戏中的其他对象具有几乎相同的代码,并且它们正常工作。

完整代码:

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()

你必须写

    newplayer 

而不是在各自的位置使用新播放器。这是因为当你尝试编写时,rect 是类实例的属性,而不是类本身

    newPlayer.rect 

您正在尝试访问不存在的 newPlayer 类的 rect 属性,因此您必须编写

    newplayer.rect

尝试

    newplayer.rect.x = 300
    newplayer.rect.y = 300

检查以下链接:-Python:类和实例属性之间的区别

相关内容

  • 没有找到相关文章