random.randrang公司恒定图像闪烁

2024-10-01 13:27:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我自己创建了一个数据结构,叫做characters。你知道吗

此数据结构具有以下方法

addCharacters(self, Character, number)

这允许用户在屏幕上添加尽可能多的字符。在这个方法中,__init__构造函数中初始化的数组被append添加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))

图像不稳定地在屏幕上的不同位置闪烁。我知道这是因为for循环中的while循环。我无法将字符添加到while循环之外,因为它不会绘制到屏幕上。你知道吗

有没有一种方法,我可以设置的位置,每个对象在这个数据结构都在不同的位置,没有不断的光点?你知道吗

提前谢谢!你知道吗


Tags: 对象方法self数据结构for屏幕绘制字符
1条回答
网友
1楼 · 发布于 2024-10-01 13:27:18

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

  1. 或者,如果可能,将位置属性xy添加到Character类本身,或者
  2. 使用字典将Character对象映射到它们的(x, y)位置。你知道吗

我不知道那个Character类是什么(你自己的类,或者从某个库中?),所以第一种可能是不可能的。对于第二种方法,Character对象需要是hashable。如果这也不可能,您可以创建一个可哈希包装类,或者只使用对象的^{}进行映射。你知道吗

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

相关问题 更多 >