Archive:Buggy : L'enregistrement des scores

De Centre de Ressources Numériques - Labomedia
Révision de 16 mars 2016 à 17:26 par Serge (discussion | contributions)

(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)
Aller à : navigation, rechercher
Retour sur les pages du jeu de voitures


Actuator : GlobalDict

Dict 01.png

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

  1. Exemple: write in GlobalDict
  1. Create a dictionary for player 1 stats

player1_Stats = { "Player" : "Terminator", "Score" : 102 }

  1. Create a chain

chain = "Vive l'anarchie"

  1. Create a list

speed = 174 score = 8 name = "God" list_exemple = [ speed, score, name ]

  1. Save dictionary to the globalDict

GameLogic.globalDict["player1"] = player1_Stats

  1. Save chain to the globalDict

GameLogic.globalDict["chain"] = chain

  1. Save score to the globalDict

GameLogic.globalDict["score"] = score

  1. 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

  1. Exemple: read in GlobalDict
  1. Read player 1 stats

player1_Stats = GameLogic.globalDict.get("player1") print "Player1 Stat are =", player1_Stats

  1. Read chain

chain = GameLogic.globalDict.get("chain") print "Chain is :", chain

  1. Read score

score = GameLogic.globalDict.get("score") print "Score = ",score

  1. 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 !

Dict 02.png 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

  1. Get owner

controller = GameLogic.getCurrentController() owner = controller.owner

  1. Get prop foo in owner

foo = owner.foo

    1. Save foo in RAM in scene A

GameLogic.globalDict["foo"] = foo

Lire foo dans la scène B

    1. Load foo from RAM in scene B

foo = GameLogic.globalDict.get("foo")

  1. Get owner

controller = GameLogic.getCurrentController() owner = controller.owner

  1. 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 !