random.randrang常量图像闪电传输



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

此数据结构具有以下方法

addCharacters(self, Character, number)

这允许用户在屏幕上添加尽可能多的字符。在该方法中,在__init__构造函数中初始化的数组是appended,以添加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循环的每次迭代中,这些位置必须保持不变。我认为这样做有两种可能性:

  1. 如果可能,将位置属性xy添加到Character类本身,或者
  2. 使用字典将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

最新更新