Python random.randrang恒定图像闪烁

Python random.randrang恒定图像闪烁,python,spring,pygame,Python,Spring,Pygame,我有一个我自己创建的数据结构,它叫做characters 此数据结构具有以下方法 addCharacters(self, Character, number) addCharacter(self, Character, x, y) 这允许用户向屏幕添加尽可能多的字符。在该方法中,在\uuuu init\uuuu构造函数中初始化的数组被追加以添加字符对象 我有一个类屏幕,在这个类中我有以下方法 addCharacters(self, Character, number) addCharact

我有一个我自己创建的数据结构,它叫做
characters

此数据结构具有以下方法

addCharacters(self, Character, number)
addCharacter(self, Character, x, y)
这允许用户向屏幕添加尽可能多的字符。在该方法中,在
\uuuu init\uuuu
构造函数中初始化的数组被
追加
以添加
字符
对象

我有一个类
屏幕
,在这个类中我有以下方法

addCharacters(self, Character, number)
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))
图像在屏幕上的不同位置不规则地闪烁。我理解这是因为
for
循环在
中,而
循环在中。我无法将字符添加到
while
循环之外,因为它不会绘制到屏幕上

是否有一种方法可以设置此数据结构中每个对象的位置,所有对象都位于不同的位置,而无需不断的闪烁


提前谢谢

我不确定我是否正确理解了这个问题。据我所知,您希望在屏幕的随机位置绘制“字符”,但在外部
while
循环的每次迭代中,这些位置必须保持不变。我认为这样做有两种可能性:

  • 如果可能,将位置属性
    x
    y
    添加到
    字符
    类本身,或者
  • 使用字典将
    字符
    对象映射到它们的
    (x,y)
    位置
  • 我不知道
    字符
    类是什么(您自己的类,或者来自某个库?),所以第一个可能不可能。对于第二种方法,需要创建
    字符
    对象。如果这也不可能,您可以创建一个可散列的包装器类,或者只使用对象的类进行映射

    方法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
    

    我想要随机位置的所有字符,你能给我举个例子吗?顺便问一下,你的数据结构真的叫做
    字符吗?如果是这样,可能还有另一个问题:在您的
    for
    循环之后,该名称将绑定到
    characterList
    iterable中的最后一项,并且该类将不再可用。您解释得很好,感谢我这么做:)