user4882248
user4882248

Reputation:

Randomly Spawning an Image

I created this function that randomly spawn a dot, but because its in my game loop the dot just does not stay where it is. I want it to spawn a dot and then wait 6 seconds and spawn another one randomly, but the first still being there. Because there is other things happening on the screen at the same time I cant use time.sleep(6). Any help solving this would be really appreciated.

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

Upvotes: 2

Views: 602

Answers (4)

Liam
Liam

Reputation: 6429

import random module:

import random

create random coordinates:

rand_X =  (random.randrange(0, display_width - image_width)
rand_Y = (random.randrange(0, display_height - image_height)

blit image:

gameDisplay.blit(yourimage,(randAppleX,randAppleY))

Upvotes: 0

Abd Azrad
Abd Azrad

Reputation: 311

If you are trying to avoid using threads, and just using a while loop, perhaps this might work:

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

Upvotes: 0

mprat
mprat

Reputation: 2471

I think a way to fix this would be to only randomly spawn a dot if certain conditions are met. So you can define a function that randomly generates new coordinates outside of your main function (and returns them). Then your main game loop will take care of rendering the dot on the screen if certain conditions are met. For example:

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))

So the idea is that you draw the same random coordinates, and keep drawing those same coordinates until the time between your last spawning and now is more than 6 seconds.

Upvotes: 0

derricw
derricw

Reputation: 7036

Don't use time.sleep. In general, in game programming, you never want to use time.sleep for any reason.

In your case, you just need to check a timer or clock every so often, and if the time is up, run your spawn function.

This is what a typical game loop will look like:

while True:
    # get/handle player input
    # update game state
    # update sprites
    # draw background
    # draw sprites
    # flip display

In your case, when you update your game state, you should check how much time has passed since you last spawned your random sprite. If it has been longer than 6 seconds, spawn a new one.

It will look something like this:

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

Upvotes: 2

Related Questions