Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
logiciels:blender:bge-python:accueil [2016/03/31 18:55] resonance [Où je suis ?] |
logiciels:blender:bge-python:accueil [2018/04/06 16:27] (Version actuelle) resonance [Game Object] |
||
---|---|---|---|
Ligne 111: | Ligne 111: | ||
==== script01.py ==== | ==== script01.py ==== | ||
+ | ++++ Voir le script | | ||
<code python> | <code python> | ||
# Deuxième script : GameObject | # Deuxième script : GameObject | ||
Ligne 219: | Ligne 219: | ||
| | ||
</ | </ | ||
+ | ++++ | ||
===== Les scènes ===== | ===== Les scènes ===== | ||
+ | * Fichier Blender : {{: | ||
+ | |||
+ | {{: | ||
+ | |||
+ | Quand on commence à écrire des scripts, il est parfois compliqué de savoir à partir de quelle scène le script est appelé et comment accéder à un objet sur une autre scène. Pour cet exemple, nous allons prendre le principe d'un jeu, avec une scène de référence, | ||
+ | |||
+ | |||
Les scènes sont des objets qui héritent de la classe : [[https:// | Les scènes sont des objets qui héritent de la classe : [[https:// | ||
Ligne 228: | Ligne 235: | ||
++++ | ++++ | ||
- | ==== Où je suis ? ==== | + | ==== Architecture des scènes |
- | * Fichier Blender : {{: | + | Pour créer les scènes, nous allons nommer les objets et les scènes de façon à pouvoir les manipuler de façon dynamique. En terminant leurs noms par un chiffre, on peut grâce au Python, retirer ce chiffre et atteindre les objets. Comme les noms des objets doivent être uniques dans tout le projet Blender, cela peut être une bonne pratique de nommer ses objets avec l' |
- | {{: | + | |
- | Quand on commence à écrire des scripts, il est parfois compliqué de savoir à partir de quelle scène le script est appelé et comment accéder à un objet sur une autre scène. Pour cet exemple, nous allons prendre le principe d'un jeu, avec une scène de référence, | + | {{: |
- | === Architecture des scènes | + | ==== Scène 0 ==== |
- | Pour créer les scènes, nous allons | + | Sur la scène 0, nous allons |
- | + | ||
- | {{: | + | |
- | === Scène 0 === | ||
- | Sur la scène 0, nous allons placer un objet " | ||
{{: | {{: | ||
- | === script02.py === | + | ==== script02.py |
++++ Voir le script | | ++++ Voir le script | | ||
<code python> | <code python> | ||
""" | """ | ||
Troisième script : | Troisième script : | ||
- | Manipulation des scènes et | + | Manipulation des scènes et des objets à travers les scènes. |
Interactions : | Interactions : | ||
Ligne 344: | Ligne 346: | ||
</ | </ | ||
++++ | ++++ | ||
+ | |||
+ | |||
+ | ==== Trouver un objet ==== | ||
+ | Le nom des objets doit être unique dans tout le fichier Blender, et les objets avec le //BGE// ne peuvent être trouver qu'en passant par la scène qui le contient. Une façon concise de retrouver un objet dans une scène : | ||
+ | <code python> | ||
+ | # Liste de toutes les scènes | ||
+ | scenes = bge.logic.getSceneList() | ||
+ | # Trouver la scène " | ||
+ | my_scene = [scene for scene in scenes if scene.name==" | ||
+ | # Trouver l' | ||
+ | my_object = my_scene.objects[' | ||
+ | </ | ||
+ | |||
+ | |||
+ | ===== Ouïe ! ===== | ||
+ | * Fichier Blender : {{: | ||
+ | {{: | ||
+ | |||
+ | |||
+ | Manipulation des collisions, des messages et des fréquences des boîtes capteurs. Les collisions font parti du groupe [[https:// | ||
+ | |||
+ | ===== Objets ===== | ||
+ | {{: | ||
+ | |||
+ | |||
+ | |||
+ | ==== Contrôler la fréquence des pulses ==== | ||
+ | Avec **sensor.skippedTicks**. | ||
+ | |||
+ | {{: | ||
+ | |||
+ | |||
+ | ==== script03.py ==== | ||
+ | |||
+ | ++++ Voir le script | | ||
+ | <code python> | ||
+ | """ | ||
+ | Manipulation des collisions, des messages et des fréquences des boîtes capteurs | ||
+ | """ | ||
+ | |||
+ | import bge | ||
+ | import random | ||
+ | |||
+ | |||
+ | # Manipuler la fréquence de la boîte capteur | ||
+ | def randFreqColors(cont): | ||
+ | obj = cont.owner | ||
+ | sensor = obj.sensors[" | ||
+ | if sensor.positive : | ||
+ | | ||
+ | # Activation du mode pulse | ||
+ | if sensor.usePosPulseMode == False: | ||
+ | sensor.usePosPulseMode = True | ||
+ | | ||
+ | # Fréquence du prochain déclenchement au hasard | ||
+ | sensor.skippedTicks = random.randrange (1,30) | ||
+ | obj.color = (random.random(), | ||
+ | | ||
+ | |||
+ | # Tests de collisions avec envois de messages | ||
+ | def sendBoom(cont): | ||
+ | obj = cont.owner | ||
+ | sensor = obj.sensors[" | ||
+ | if sensor.positive : | ||
+ | msg = "From " + obj.name | ||
+ | obj.sendMessage(" | ||
+ | | ||
+ | |||
+ | # Réception d'un message et ajout d'un objet texte | ||
+ | def receiveBoom(cont): | ||
+ | obj = cont.owner | ||
+ | sensor = obj.sensors[" | ||
+ | if sensor.positive : | ||
+ | print(" | ||
+ | | ||
+ | # Récupération du contenu du message et séparation des mots dans un tableau | ||
+ | # message[0] est le premier élément, ici " | ||
+ | # message[1] est le deuxième élément, ici le nom de la sphère | ||
+ | message = sensor.bodies[0].split(" | ||
+ | | ||
+ | # Construction du nom de l' | ||
+ | textName = obj.name + " | ||
+ | | ||
+ | # Ajout de cet objet dans la scène | ||
+ | # Arguments : nom de l' | ||
+ | obj.scene.addObject(textName, | ||
+ | | ||
+ | # On modifie ensuite le texte et la position de l' | ||
+ | objText = obj.scene.objects[textName] | ||
+ | objText.text = "Ouïe ! " + message[1] + " !" | ||
+ | objText.worldPosition.z = obj.worldPosition.z + 1 | ||
+ | | ||
+ | # On change aussi la couleur | ||
+ | obj.color = (random.randrange(10)/ | ||
+ | </ | ||
+ | ++++ | ||
+ | |||
+ | ===== Autres exemples ===== | ||
+ | * Fichier Blender et les textures : {{: | ||
+ | |||
+ | |||
+ | {{: | ||
+ | |||
+ | Jouer une animation et changer d' | ||
+ | ==== Objets ==== | ||
+ | {{: | ||
+ | |||
+ | |||
+ | ==== script04.py ==== | ||
+ | |||
+ | ++++ Voir le script | | ||
+ | <code python> | ||
+ | """ | ||
+ | Jouer une animation et changer d' | ||
+ | """ | ||
+ | |||
+ | import bge | ||
+ | from bge import texture | ||
+ | from bge import logic | ||
+ | import random | ||
+ | |||
+ | # Jouer une animation | ||
+ | def runAnim(cont): | ||
+ | obj = cont.owner | ||
+ | sens = cont.sensors[' | ||
+ | if sens.positive: | ||
+ | # Déclenchement de l' | ||
+ | obj.playAction(" | ||
+ | |||
+ | |||
+ | # Changer d' | ||
+ | # Un dossier " | ||
+ | # dont le nom des fichiers suit la logique " | ||
+ | def randTexture(cont): | ||
+ | # Nombre d' | ||
+ | max=6 | ||
+ | obj = cont.owner | ||
+ | # Un capteur quelconque | ||
+ | sens = cont.sensors[' | ||
+ | if sens.positive: | ||
+ | # Image orginale de la texture | ||
+ | ID = texture.materialID(obj, | ||
+ | object_texture = texture.Texture(obj, | ||
+ | obj.attrDict[" | ||
+ | # Tirage d'un nombre au hasard et conversion en String pour former le nom de l' | ||
+ | n = str(random.randrange(max)) | ||
+ | # Chemin de l' | ||
+ | url = logic.expandPath("// | ||
+ | new_source = texture.ImageFFmpeg(url) | ||
+ | object_texture.source = new_source | ||
+ | object_texture.refresh(False) | ||
+ | </ | ||
+ | ++++ | ||
+ | ==== Voir aussi === | ||
+ | Des variables peuvent être accessibles depuis toutes les scènes avec [[https:// | ||
+ | |||
+ | Manipuler un actionneur " | ||
+ | |||
+ | Pour les notions de distances entre objet et d' | ||
+ | |||
+ | Pour communiquer avec d' | ||
+ |