2015-06-14 113 views
1

我需要访问类中的全局对象来更改它的图像。这里的代码:如何访问类内部的全局对象?

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

这是'Play_Button'的handle_collide方法中的重要部分。它试图访问创建的对象'play_obj',但代码似乎什么都不做。当鼠标设置的Play_Button的handle_collide没有。我已经尽力了,所以如果这看起来像一个愚蠢的问题,而不是抱歉,因为我是新的。

+0

尝试在“Play_Button”的'handle_collide'内打印类型(play_obj)'。它说什么? –

+0

“sys.stdout”上出现“COME ON!”,或者“nothing”是否意味着你也看不到打印的字符串? –

+0

正在打印字符串。 – Lixerman99

回答

2

您不应该首先使用全局变量。

您只能创建一个Play_Button对象,所以全球play_obj总是is self。您可以让该对象设置自己的字段:

self.value = play_image2 
+1

谢谢!还要感谢bshuster13! – Lixerman99

2

我试图理解为什么这样做以下列方式不能满足你

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