Python 随机生成图像

Python 随机生成图像,python,random,pygame,Python,Random,Pygame,我创建了这个随机产生一个点的函数,但是因为它在我的游戏循环中,点并没有停留在它所在的位置。我希望它产生一个点,然后等待6秒,并随机产生另一个,但第一个仍然存在。因为屏幕上同时有其他事情发生,我不能使用时间。睡眠(6)。如果您能帮助解决此问题,我们将不胜感激 def random_spawn(): image_x = random.randrange(122, 476) image_y = random.randrange(90, 350)

我创建了这个随机产生一个点的函数,但是因为它在我的游戏循环中,点并没有停留在它所在的位置。我希望它产生一个点,然后等待6秒,并随机产生另一个,但第一个仍然存在。因为屏幕上同时有其他事情发生,我不能使用
时间。睡眠(6)
。如果您能帮助解决此问题,我们将不胜感激

    def random_spawn():
        image_x = random.randrange(122, 476)
        image_y = random.randrange(90, 350)
        screen.blit(Green, (image_x, image_y))

不要使用
时间。睡眠
。一般来说,在游戏编程中,无论出于何种原因,您都不想使用
time.sleep

在您的情况下,您只需要每隔一段时间检查一次计时器或时钟,如果时间到了,请运行spawn函数

这就是典型的游戏循环的样子:

while True:
    # get/handle player input
    # update game state
    # update sprites
    # draw background
    # draw sprites
    # flip display
在您的情况下,当您更新游戏状态时,您应该检查自上次生成随机精灵以来经过了多少时间。如果已超过6秒,则生成一个新的

它看起来像这样:

if time.clock() - last_spawn_time > 6.0:
     random_spawn()

我认为解决这个问题的方法是,如果满足某些条件,只随机生成一个点。因此,您可以定义一个函数,该函数在主函数之外随机生成新坐标(并返回它们)。然后,如果满足某些条件,主游戏循环将负责渲染屏幕上的点。例如:

image_x, image_y = get_random_coordinates()
while True:
    if time.clock() - last_spawn_time > 6.0:
        image_x, image_y = get_random_coordinates()
        last_spawn_time = time.clock()
    screen.blit(Green, (image_x, image_y))

因此,我们的想法是绘制相同的随机坐标,并一直绘制这些坐标,直到最后一次生成到现在的时间超过6秒。

如果您试图避免使用线程,而只是使用while循环,那么这可能会起作用:

import time

def my_function():
    print 'it has been about 6 seconds'


prev_time_stamp = time.time()
while True:
    #do something
    #do something else
    if time.time() > prev_time_stamp + 6:
        prev_time_stamp = time.time()
        my_function()
    #do something else
导入随机模块:

随机导入

创建随机坐标:

blit图像:


我试过了,但它做的是等待5分钟,然后它开始在绿点上大量繁殖。我的意思是公平的,你的随机繁殖函数有一些问题。它实际上并没有创建任何对象,它只是一次绘制一些东西,如果你在每一帧中清空画布,它只会持续一帧。如果需要更详细的帮助,您需要发布整个程序。提供的答案只是基于您提供给我们的少量信息的建议。您只需在调用random_spawn()之前分配
last_spawn_time=time.clock()
,以防止多次调用。
rand_X =  (random.randrange(0, display_width - image_width)
rand_Y = (random.randrange(0, display_height - image_height)
gameDisplay.blit(yourimage,(randAppleX,randAppleY))