Archive:Buggy : L'enregistrement des scores
Retour sur les pages du jeu de voitures |
Sommaire
Actuator : GlobalDict
Le Game Engine Blender a un module qui permet d'enregistrer des valeurs dans un dictionnaire Python:
Si votre fichier s'appelle "machin.blend", le dictionnaire est "machin.bgeconf" dans le même dossier. Ce n'est pas modifiable.
Il n'y a qu'un seul dictionnaire qui est GlobalDict, mais on peut mettre dedans toutes les valeurs qu'on veut: variables, listes, dictionnaires.
Le principe
L'Actuator GlobalDict enregistre ou lit le fichier "machin.bgeconf" sur le disque dur.
La liste des fonction python
Le module GameLogic n'a qu'une seule fonction pour le GlobalDict pour enregistrer ou lire le GlobalDict.
Exemple
Principe
Lancer le script ci-dessous
- Exemple: write in GlobalDict
-
- Create a dictionary for player 1 stats
player1_Stats = { "Player" : "Terminator", "Score" : 102 }
- Create a chain
chain = "Vive l'anarchie"
- Create a list
speed = 174 score = 8 name = "God" list_exemple = [ speed, score, name ]
- Save dictionary to the globalDict
GameLogic.globalDict["player1"] = player1_Stats
- Save chain to the globalDict
GameLogic.globalDict["chain"] = chain
- Save score to the globalDict
GameLogic.globalDict["score"] = score
- Save list_exemple to the globalDict
GameLogic.globalDict["list_exemple"] = list_exemple
Lancer l'Actuators Save GlobalDict
Fermer puis rouvrir votre blend ou changer de scene
Lancer l'Actuators Load GlobalDict
Lancer le script ci-dessous
- Exemple: read in GlobalDict
-
- Read player 1 stats
player1_Stats = GameLogic.globalDict.get("player1") print "Player1 Stat are =", player1_Stats
- Read chain
chain = GameLogic.globalDict.get("chain") print "Chain is :", chain
- Read score
score = GameLogic.globalDict.get("score") print "Score = ",score
- Read list_exemple
list_exemple = GameLogic.globalDict.get("list_exemple") print "Un exemple de liste :", list_exemple print "His name is ", list_exemple[2]
Un fichier blend pour tester
Le blend Fichier:GlobalDict.blend pour comprendre. Les briques doivent tourner dans l' ordre:
- [X] Lancer le script save_stat.py pour créer les datas
- [S] Sauvegarder le GlobalDict
- [Q] Changer de scène
- [L] Charger le GlobalDict
- [X] Lancer le script load_dict.py pour lire les datas, les imprimer, les traiter ...
La sortie est dans la console
Pour savoir si le fichier GlobalDict.bgeconf a été actualisé, regarder l'heure de modification du fichier !
pourquoi le script tourne 2 fois ?
Les fonctions écrire et lire dans le GlobalDict
La seule manière de faire passer une variable d'une scène à une autre, est de le faire passer avec le GlobalDict.
Ecrire foo dans la Scéne A
- Get owner
controller = GameLogic.getCurrentController() owner = controller.owner
- Get prop foo in owner
foo = owner.foo
- Save foo in RAM in scene A
GameLogic.globalDict["foo"] = foo
Lire foo dans la scène B
- Load foo from RAM in scene B
foo = GameLogic.globalDict.get("foo")
- Get owner
controller = GameLogic.getCurrentController() owner = controller.owner
- Get prop foo in owner
owner.foo = foo
Exemple concret
C'est comme l'exemple de la doc : foo est le score qui suit dans la Scene B Fichier:Scene 2 scene.blend. Mais cet exemple ne lit pas le GlobalDict à l'ouverture de la scène A.
Enregistrer un score pour le réutiliser en ouvrant le jeu à nouveau
Il s'agit de:
- Conserver les scores, les dommages entre scènes
- Archiver les scores des joueurs
- Les recharger lors de l'ouverture du jeu
L'ordre des étapes
Il faut que le jeu tourne en respectant l'ordre des actions, en temporisant entre certaines actions. Le chargement du GlobalDict est une lecture sur disque dur, il faut attendre un peu pour l'action suivante, avec un Delay de 30 par exemple !