Regina Kang
Regina Kang

Reputation: 151

Why "NameError: name 'draw_Objects' is not defined" occurs

I am making a small game using pygame. I have defined a function called draw_Objects() but Name Error occurs as if I didn't define the function. What should I do? The code is part of the module

I have tried to change the draw_Objects() function but I couldn't solve it.

 import pygame
 from const import *

   class item(pygame.sprite.Sprite):

    def __init__(self,game):

        super().__init__()
        self.game=game

        #self.screen=screen
        self.width=WIDTH
        self.height=HEIGHT

        #potion 사진 불러옴
        self.image=pygame.image.load("tile/red-potion.png")
        self.rect = self.image.get_rect()
        self.red_potion=pygame.image.load("tile/red-potion.png")
        self.blue_potion=pygame.image.load("tile/blue-potion.png")

        self.mask=pygame.mask.from_surface(self.image)
        self.rect = self.image.get_rect()

    redItem=[50,530,300,50,850,100,600,280,800,400]

    def __call__(self):
        print (" ")


    def item_display(self,screen):
        #아이템 화면에 표시
        screen.blit(self.red_potion,(50,530)) #red1
        screen.blit(self.blue_potion,(30,530))

        screen.blit(self.blue_potion,(30,460))

        screen.blit(self.red_potion,(300,50)) #red2
        screen.blit(self.blue_potion,(400,150))

        screen.blit(self.image,(850,100)) #red3
        screen.blit(self.red_potion,(600,280)) #red4
        screen.blit(self.red_potion,(800,400)) #red5
        screen.blit(self.blue_potion,(600,370))

    def draw_Objects(myList=[]):
        for i in myList:
            x=myList[i]
            y=myList[i+1]
            screen.blit(self.red_potion,(x,y))
            i+=1

    def item_eat(self,screen):
        item__=item(self)
        #red2 item
        self.rect.x=300
        self.rect.y=50
        #item과 player 충돌 검사
        hits_item=pygame.sprite.spritecollide(self,self.game.player_group,False,pygame.sprite.collide_mask)

        if hits_item :
            screen.blit(self.red_potion,(50,530)) #red1
            screen.blit(self.blue_potion,(30,530))

            screen.blit(self.blue_potion,(30,460))
            screen.blit(self.blue_potion,(400,150))

            screen.blit(self.red_potion,(850,100)) #red3
            screen.blit(self.red_potion,(600,280)) #red4
            screen.blit(self.red_potion,(800,400)) #red5
            screen.blit(self.blue_potion,(600,370))
        else:
            #item__.item_display(self.screen)
            draw_Objects(redItem)

Upvotes: 0

Views: 1467

Answers (3)

LampToast
LampToast

Reputation: 553

this line

draw_Objects(redItem)

is looking for a global function named draw_Objects which does not exist. you need to call

self.draw_Objects(redItem)

However, you would also need to include self as a parameter in the function definition like so

def draw_Objects(self, myList=[]):

Upvotes: 1

Sid
Sid

Reputation: 2189

It's rather simple.

def draw_Objects(self):
    myList=[]
    for i in myList:
        x=myList[i]
        y=myList[i+1]
        screen.blit(self.red_potion,(x,y))
        i+=1

Then call it like:

self.draw_Objects()

Upvotes: 0

jdpy19
jdpy19

Reputation: 375

draw_Objects is not a global function, it is an attribute of the class and can be called with self.

def item_eat(self,screen):
        item__=item(self)
        #red2 item
        self.rect.x=300
        self.rect.y=50
        #item과 player 충돌 검사
        hits_item=pygame.sprite.spritecollide(self,self.game.player_group,False,pygame.sprite.collide_mask)

        if hits_item :
            screen.blit(self.red_potion,(50,530)) #red1
            screen.blit(self.blue_potion,(30,530))

            screen.blit(self.blue_potion,(30,460))
            screen.blit(self.blue_potion,(400,150))

            screen.blit(self.red_potion,(850,100)) #red3
            screen.blit(self.red_potion,(600,280)) #red4
            screen.blit(self.red_potion,(800,400)) #red5
            screen.blit(self.blue_potion,(600,370))
        else:
            #item__.item_display(self.screen)
            self.draw_Objects(redItem) # Change this line to reference draw_Objects

Upvotes: 1

Related Questions