Как получить доступ к глобальному объекту внутри класса?

Мне нужно получить доступ к глобальному объекту внутри класса, чтобы изменить его изображение. Вот код:

import pygame
from livewires import games
from livewires import color
import time
import random

games.init(screen_width = 640, screen_height = 480, fps = 50)

class Cursor(games.Sprite):
    """The pokemon based cursor!"""

    def __init__(self, image, x ,y):
        super().__init__(image=image, x=x, y=y)



    def update(self):


        self.x = games.mouse.x
        self.y = games.mouse.y   
        self.check_collide()

    def check_collide(self):
        for sprite in self.overlapping_sprites:
            sprite.handle_collide()



class Play_Button(games.Sprite):
    """The 'Play' button on the menu."""

    def __init__(self , image, x ,y):
        super().__init__(image=image, x=x, y=y)

    def handle_collide(self):
        global play_obj

        play_image2 = games.load_image("playbtn2.png", transparent = True)
        play_obj.value = play_image2
        print("COME ON!")


class P1C_Button(games.Sprite):

    def __init__(self, image, x, y):
        super().__init__(image=image, x=x, y=y)

class Logo(games.Sprite):

    def handle_collide(self):
        print("Collision ignored.")



play_image = games.load_image("playbtn.png", transparent = True)
play_obj = Play_Button(image = play_image,
                x = games.screen.width/2,
                y = games.screen.height/2)
games.screen.add(play_obj)


logo_image = games.load_image("FamilyMon.png", transparent = True)
logo_obj = Logo(image = logo_image,
                x = games.screen.width/2,
                y = 75)
games.screen.add(logo_obj)

white_image = games.load_image("white.png", transparent = False)
games.screen.background = white_image

cursor_image = games.load_image("cursor.png", transparent = True)
cursor_obj = Cursor(image = cursor_image,
                    x = games.mouse.x,
                    y = games.mouse.y)
games.screen.add(cursor_obj)
games.mouse.is_visible = False
games.screen.event_grab = True

games.screen.mainloop()

Важная часть этого находится внутри метода handle_collide Play_Button. Он пытается получить доступ к созданному объекту play_obj, но код, похоже, ничего не делает. Когда мышь устанавливает Play_Button's handle_collide, ничего. Я старался изо всех сил здесь, так что если это кажется глупым вопросом, то извините, потому что я новичок.

2 ответа

Решение

Вы не должны использовать глобальную переменную в первую очередь.

Вы только создаете один Play_Button объект, поэтому глобальный play_obj всегда is self, Вы можете просто настроить этот объект на свое поле:

self.value = play_image2

Я пытаюсь понять, почему выполнение этого следующим образом не удовлетворяет вас

def handle_collide(self):
    play_image2 = games.load_image("playbtn2.png", transparent = True)
    self.value = play_image2
    print("COME ON!")

...

Из того, что я вижу, есть только один Play_Button экземпляр, который вы хотите изменить свой образ, когда collide происходит.

Тогда почему бы не использовать self.value?

Другие вопросы по тегам