我是POO的初学者。
我实际上是用pygame编写游戏编码,我想将变量的名称添加到列表或词典中。
我有一个类
class Hero:
def __init__(self, posx, posy, image) :
self.name = "Hero"
self.posx = posx
self.posy = posy
self.image = pygame.image.load(image).convert_alpha()
self.width = self.image.get_rect()[2]
self.height = self.image.get_rect()[3]
我有一个在屏幕上显示精灵的功能:
def show(self) :
display.blit(self.image, (self.posx, self.posy))
它有效,没有问题,我实际上正在使用它:
captainamerica = Hero(100,400, "sprites/captainamerica/base.png")
captainamerica.show()
ironman = Hero(100,400, "sprites/ironman/base.png")
ironman.show()
但我想用这个:
listhero = []
listhero.append(captainamerica)
listhero.append(ironman)
i = 0
while i < len(listhero):
listhero[i].show()
它不起作用,因为它采用变量的值而不是变量的名称。
感谢您的帮助,如果我的英语不好,请抱歉。
答案 0 :(得分:1)
你没有递增i,所以这导致无限循环。
你可以添加
i += 1
在循环结束时。
更好的是,这样做:
for h in listhero:
h.show()
关于您选择的数据结构,正如评论中所强调的那样,使用字典比使用列表更好。你可以这样做:
heroes = {}
heroes['Captain America'] = Hero(100, 400, 'sprites/captainamerica/base.png')
答案 1 :(得分:1)
你可以使用字典:
dictheroes = {}
dictheroes['ironman'] = Hero(100,400, "sprites/ironman/base.png")
答案 2 :(得分:1)
保持列表,你也可以
[h.show() for h in listhero]
你可以使用字典,但是blit的顺序不是dict中insert的顺序。如果您需要保留blit的顺序,请继续列表或使用:
collections.OrderedDict