2017-04-24 4 views
0

Je suis encore nouveau sur python et OpenGL. J'ai écrit un code court pour déplacer une voiture sur l'axe z et here est mon code entièrement écrit si nécessaireMettre en pause et redémarrer le jeu en Python (opengl)

Ce que je veux faire est de mettre en pause le jeu lorsque l'utilisateur frappe "p", redémarrer lorsque "r" et quitter le programme quand « q » ... arrêter de fumer fonctionne parfaitement, mais je ne peut redémarrer ni mettre en pause le jeu malgré tous mes essais et voici la partie que j'ai écrit à considérer tous les cas:

def keyboard (key,x,y): 
    if key == b"q" : 
    sys.exit(0) 

    if key == b"r" : 
    restart_program() 

    if key == b"p": 
    pause() 

PS : J'ai essayé le liberary Pygame mais il ne fonctionne pas correctement comme prévu

toute aide?!

+0

Voici un bon tutoriel qui m'a aidé avec ce http://gamedevgeek.com/tutorials/managing-game-states-in-c/. Fondamentalement, vous enveloppez toute votre logique de jeu dans un objet GameState, puis votre "jeu" devient un gestionnaire d'état de jeu. Quand vous voulez faire une pause, votre GameState passera le contrôle à un MenuState, provoquant l'arrêt de la mise à jour de GameState. – Will

+0

Le code dans ma réponse est censé être un modèle, vous devriez déplacer tout votre code courant de mise à jour et de dessin à une fonction appelée 'UpdateAllTheThings' * et * vous devriez avoir toutes vos pièces mobiles bouger d'un montant qui sclaes avec 'time_elapsed' (' glTranslatef (-2.5 + mov, -0.5,0.5 * 2.5) '=>' glTranslatef (-2.5+ (mov * time_elapsed), - 0.5.0.5 * 2.5) '). De cette façon, le laisser 0 empêchera le mouvement, et le passage d'une valeur (millisecondes ou autre) mettra à l'échelle le mouvement avec le temps écoulé depuis la dernière mise à jour. – Will

Répondre

0

Voir le lien sur mon commentaire d'une façon plus complète de la manipulation mise en pause, mais vous pouvez aussi simplement factoriser votre code de dessin à quelque chose le long des lignes de:

elapsed_time = 0 
paused = False 

def update(): 
    start_time = time.time() 

    if key == b"r" : 
    paused = False 

    if key == b"p": 
    paused = True 

    if paused: 
    elapsed_time = time.time() - start_time 
    else: 
    elapsed_time = 0 

    UpdateAllTheThings(elapsed_time) 

while True: 
    update() 

Ensuite, en mettant à jour toutes les pièces mobiles de votre système, vous voudrez mettre à l'échelle chaque mouvement de la quantité au temps passé. En ayant une fonction update() séparée qui prend le temps écoulé en tant que paramètre, vous pouvez simuler une pause en lui passant 0. Le system of game states rend ceci beaucoup plus robuste et extensible, cela vaut la peine d'en apprendre davantage.