2012-06-10 1 views
0

Я знаю, что этот вопрос задан раньше, но я не смог найти его для pygame. У меня есть монета, которая увеличивает мои очки на 5000 каждый раз, когда она поднимается. Однако, как только я подниму монету, появится еще одна. Я не хочу, чтобы он появлялся еще 30 секунд. Как это можно сделать без приостановки всей программы?Выполнение функции подождать определенное количество времени до ее выполнения в pygame

if coin.collidepoint(x,y): 
    points+=5000 
    coin=makecoin() 
+1

Почти невозможно ответить без дополнительной информации об архитектуре вашей программы. – wroniasty

+0

Рассматривали ли вы использование таймера? – jakebird451

ответ

0

В вашей игре есть основной цикл. Когда вы берете монетку вы должны экономить время, что вы выбрали его и установить coin = None, то в этом главном цикле вы должны иметь что-то вроде следующего:

if coin is None and current_time > coin_picked_up + 30: 
    coin = makecoin() 
0

Я бы рекомендовал таймер. Это должно быть так просто.

from threading import Timer 

if coin.collidepoint(x,y): 
    points+=5000 
    t = Timer(30.0, makecoin) 
    t.start() 
+0

Это не работает. Когда мой игрок идет по монете, он просто постоянно увеличивается в точках с интервалом в 5000. – Andre

+0

@ Андре вы удалили монету, когда игрок переместил ее? – jakebird451

+0

Ну монета помещается в функцию, и каждый раз, когда эта функция выполняется, она создает новую точку x и y для монеты, поэтому, создавая новые точки, я технически удаляю монету. – Andre

0

Посмотрите на модуль sched. Вы можете использовать это, чтобы отложить создание новой монеты.

Если предположить, что у вас есть планировщик называется s, определяется следующим образом (так же, как, например, в руководстве по Python) ...

import sched, time 
s = sched.scheduler(time.time, time.sleep) 

Тогда вы бы запланировать монеты должны быть созданы, как это .. .

if coin.collidepoint(x,y): 
    points+=5000 
    s.enter(30, 1, make_coin,()) 

И вы должны периодически называть s.run() для запуска всего, что должно быть запущено. Маловероятно, что вам нужно будет называть это на каждом тике, если вам действительно не нужны мелкие сроки.

Смежные вопросы