2017-02-21 35 views
0

Поскольку я еще новичок в программировании, я пытаюсь придумать некоторые базовые программы, чтобы помочь мне понять кодировку и узнать.Python: контроль скорости выполнения для цикла

Я пытаюсь создать объект, который стреляет маленькими частицами вверх, используя pygame. Все работает отлично, но я не могу найти способ контролировать скорость, с которой объекты создают эти частицы. У меня есть класс Launcher и Particle, а также списки пусковых установок и частиц. Вам нужны все линии программы? Вот основные настройки:

particles = [] 
launchers = [] 

class Particle: 

    def __init__(self, x, y): 

     self.pos = np.array([x, y]) 
     self.vel = np.array([0.0, -15]) 
     self.acc = np.array([0.0, -0.5]) 
     self.colors = white 
     self.size = 1 

    def renderParticle(self): 

     self.pos += self.vel 
     self.vel += self.acc 
     pygame.draw.circle(mainscreen, self.colors, [int(particles[i].pos[0]), int(particles[i].pos[1])], self.size, 0) 

class Launcher: 

    def __init__(self, x): 
     self.width = 10 
     self.height = 23 
     self.ypos = winHeight - self.height 
     self.xpos = x 

    def drawLauncher(self): 
     pygame.draw.rect(mainscreen, white, (self.xpos, self.ypos, self.width, self.height)) 

    def addParticle(self): 
     particles.append(Particle(self.xpos + self.width/2, self.ypos)) 

while True : 
    for i in range(0, len(launchers)): 
     launchers[i].drawLauncher() 
     launchers[i].addParticle() 
     # threading.Timer(1, launchers[i].addparticle()).start() 
     # I tried that thinking it could work to at least slow down the rate of fire, it didn't 

    for i in range(0, len(particles)): 
     particles[i].renderParticle() 

я использовать мышь, чтобы добавить новые пусковые установки в массив и время цикла, чтобы вынести все. Как я уже сказал, я хотел бы найти способ контролировать скорость, с которой моя Launcher выплевывает эти частицы, пока программа все еще работает (поэтому sleep() не может работать)

ответ

1

Модуль PyGame time содержит то, что вам понадобиться. get_ticks() расскажет, сколько миллисекунд в вашем коде. Отслеживая его значение, в последний раз частицы были порождены, вы можете контролировать частоту выпуска. Что-то вроде:

particle_release_milliseconds = 20 #50 times a second 
last_release_time = pygame.time.get_ticks() 
... 
current_time = pygame.time.get_ticks() 
if current_time - last_release_time > particle_release_milliseconds: 
    release_particles() 
    last_release_time = current_time 
+0

Некоторые дальнейшего чтения, если вы заинтересованы в более сложных способов реализации вашей игровой цикл: www.koonsolo.com/news/dewitters-gameloop/ – Matt

+0

прекрасно работает! Каждая частица может иметь свой собственный «last_released_time», огромное спасибо, это прекрасно! –