2017-02-21 3 views
0

Comme je suis encore novice en programmation, j'essaie de trouver des programmes de base simplement pour m'aider à comprendre le codage et à apprendre. J'essaie de créer un objet qui pousse de petites particules vers le haut en utilisant pygame. Tout fonctionne bien, mais je ne peux pas trouver un moyen de contrôler la vitesse à laquelle les objets créent ces particules. J'ai une classe Lanceur et Particule, et une liste de lanceurs et de particules. Avez-vous besoin de toutes les lignes du programme? Voici la configuration de base:Python: Contrôler une vitesse d'exécution «en boucle»

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

J'utilise la souris pour ajouter de nouveaux lanceurs au tableau et la boucle while pour rendre tout. Comme je l'ai dit, je voudrais trouver un moyen de contrôler la vitesse à laquelle mon lanceur cracher ces particules, alors que le programme est toujours en cours d'exécution (donc sleep() ne peut pas fonctionner)

Répondre

1

Le module PyGame time contient ce que tu auras besoin. get_ticks() vous dira combien de millisecondes vous avez dans votre code. En gardant une trace de sa valeur la dernière fois que les particules ont été générées, vous pouvez contrôler la fréquence de libération. Quelque chose comme:

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

Certains autres lectures si vous êtes intéressé par des moyens plus complexes de la mise en œuvre de votre boucle de jeu: www.koonsolo.com/news/dewitters-gameloop/ – Matt

+0

fonctionne à merveille! Chaque particule peut avoir son propre "last_released_time", merci beaucoup, c'est parfait! –