我有一个自己创建的数据结构,它叫做characters
。
此数据结构具有以下方法
addCharacters(self, Character, number)
这允许用户在屏幕上添加尽可能多的字符。在该方法中,在__init__
构造函数中初始化的数组是append
ed,以添加Character
对象。
我有一个类screen
,在这个类中我有以下方法
addCharacter(self, Character, x, y)
这在屏幕上画出这样的字符:
self.screen.blit(character.image,(x,y)
我在运行代码的主类中调用这些方法。创建了表示游戏运行的while循环。在这个while循环中,必须绘制对象,因此screen.blit
必须发生在while循环内。
这是问题:当我在while循环外调用方法myarray.addCharacter(character,4)
时,
for characters in charactersList:
screen.addCharacter(character, random.randrange(0, screen.width), random.randrange(0, world.screen))
图像不稳定地在屏幕上的不同位置闪电。我理解这是因为while
循环中的for
循环。我不能在while
循环之外添加字符,因为它不会绘制到屏幕上。
有没有一种方法可以将这个数据结构中每个对象的位置都设置在不同的位置,而不需要不断的闪电战?
提前感谢!
不确定我是否正确理解了这个问题。据我所知,您希望在屏幕的随机位置绘制"字符",但在外部while
循环的每次迭代中,这些位置必须保持不变。我认为这样做有两种可能性:
- 如果可能,将位置属性
x
和y
添加到Character
类本身,或者 - 使用字典将CCD_ 15对象映射到它们的CCD_
我不知道Character
类是什么(你自己的类,或者来自某个库?),所以第一个可能不可能。对于第二种方法,Character
对象需要是可散列的。如果这也不可能,您可以创建一个可散列的包装类,或者只使用对象的id
进行映射。
方法2的代码可能看起来有点像这样:
# create dictionary, defaulting to new random positions
randpos = lambda: (random.randrange(0, width), random.randrange(0, height))
d = collections.defaultdict(randpos)
for i in range(10): # corresponds to your outer 'while' loop
print "outer loop", i
for k in range(5): # your 'for characters...' loop
x, y = d[k] # get x, y from dict, default to random position
print x, y # use position