Python Forum
[PyGame] AttributeError while switching between Sprite Animations
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
[PyGame] AttributeError while switching between Sprite Animations
#1
Getting an AttributeError(AttributeError: 'builtin_function_or_method' object has no attribute 'get_rect') after I added code to switch Sprite Animations when arrow keys are clicked.
Wondering what I need to change?
Below is my Sprite1 Class and the relevant code from the main file.
(PyGame)

Sprite1 Class:
------------------------------------------------------
import pygame
class Sprite1(pygame.sprite.Sprite):
  def __init__(self):   
    super().__init__()
    self.faceUp = True
    self.faceDown = False
    self.faceLeft = False 
    self.faceRight = False
    self.image = pygame.image.load('player.png').convert_alpha
    self.rect = self.image.get_rect()
  
  def facing(self):
    if self.faceUp == True:
      self.image = pygame.image.load('player.png').convert_alpha
      self.rect = self.image.get_rect()
    elif self.faceDown == True:
      self.image = pygame.image.load('playerDown.png').convert_alpha
      self.rect = self.image.get_rect()
    elif self.faceLeft == True:
      self.image = pygame.image.load('playerLeft.png').convert_alpha
      self.rect = self.image.get_rect()
    elif self.faceRight == True:
      self.image = pygame.image.load('playerRight.png').convert_alpha
      self.rect = self.image.get_rect()
Relevant Bits from Main File:
----------------------------------------------------------

import pygame 
from sprite1 import Sprite1
pygame.init() 

#game Window 
screen_width = 800
screen_height = 400

screen = pygame.display.set_mode((screen_width, screen_height)) 
pygame.display.set_caption('Warrior Quest')

#setup player 
player = Sprite1()
player.rect.x = 400
player.rect.y = 380

#game loop running 
running = True
while running:
  
  draw_bg()
  if main_menu == True: 
    
    if start_button.draw():
      main_menu = False
    if cancel_button.draw():
      running = False 
  else:  
    player.draw(screen)
   
    keys = pygame.key.get_pressed()
    if keys[pygame.K_LEFT] and player.rect.x>5:
      player.faceLeft = True 
      player.facing()
      player.rect.x -= 5
    if keys[pygame.K_RIGHT] and player.rect.x<790:
      player.faceRight = True 
      player.facing()
      player.rect.x += 5
    if keys[pygame.K_UP] and player.rect.y>10:
      player.faceUp = True 
      player.facing()
      player.rect.y -= 5
    if keys[pygame.K_DOWN]and player.rect.y<395:
      player.faceDown = True 
      player.facing()
      player.rect.y += 5
  
  for event in pygame.event.get():
    if event.type == pygame.QUIT:
      running = False
  
  pygame.display.update() 
pygame.quit()
Reply
#2
The problem is in the line ...

self.image = pygame.image.load('player.png').convert_alpha
It's missing a set of parentheses in order to actually call the method. Try this:

self.image = pygame.image.load('player.png').convert_alpha ()
Reply
#3
What you've got so far has been fixed, and it now works as anticipated. You can shoot each other, but that's all there is to it. However, it appears to be a solid start.

WIDTH, HEIGHT = 900, 500
WIN = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption('First Game!')

WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
RED = (255, 0, 0)
YELLOW = (255, 255, 0)
BORDER = pygame.Rect(WIDTH//2 - 5, 0, 10, HEIGHT)
SPACESHIP_WIDTH, SPACESHIP_HEIGHT = 55, 44
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  [PyGame] Sprite image.get_rect() moves sprite to 0, 0 michael1789 2 4,551 Dec-13-2019, 08:37 PM
Last Post: michael1789
  Sprite not rendering Clunk_Head 2 2,095 Oct-03-2019, 11:27 AM
Last Post: Clunk_Head
  Need help making a sprite GalaxyCoyote 4 3,184 Aug-11-2019, 09:12 PM
Last Post: metulburr
  moving a sprite pfaber11 3 2,544 May-15-2019, 12:52 PM
Last Post: pfaber11
  [PyGame] Need Help With Sprite ghost0fkarma 2 3,251 Jan-09-2018, 02:14 PM
Last Post: ghost0fkarma

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020