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