Wiki

Reso-nance numérique | Arts et cultures libres

Outils du site


logiciels:blender:bge-python:accueil

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

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 19:06]
resonance [script02.py]
logiciels:blender:bge-python:accueil [2018/04/06 16:27] (Version actuelle)
resonance [Game Object]
Ligne 236: Ligne 236:
  
 ==== Architecture des scènes ==== ==== Architecture des scènes ====
-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.+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'identifiant de la scène.
  
 {{:logiciels:blender:bge-python:bge-python-06-outliner.png|}} {{:logiciels:blender:bge-python:bge-python-06-outliner.png|}}
Ligne 346: Ligne 346:
 </code> </code>
 ++++ ++++
 +
 +
 +==== 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 "Scene0"
 +my_scene = [scene for scene in scenes if scene.name=="Scene0"][0]
 +# Trouver l'objet "MonJoliCube0" de cette scène
 +my_object = my_scene.objects['MonJoliCube0']
 +</code>
 +
 +
 +===== Ouïe ! =====
 +  * Fichier Blender : {{:logiciels:blender:bge-python:bge-python-04.blend|}}
 +{{:logiciels:blender:bge-python:animcollision2.gif|}}
 +
 +
 +Manipulation des collisions, des messages et des fréquences des boîtes capteurs. Les collisions font parti du groupe [[https://www.blender.org/api/blender_python_api_2_77_release/bge.types.KX_TouchSensor.html|bge.types.KX_TouchSensor]].
 +
 +===== Objets =====
 +{{:logiciels:blender:bge-python:bge-python-07.png|}}
 +
 +
 +
 +==== Contrôler la fréquence des pulses ====
 +Avec **sensor.skippedTicks**.
 +
 +{{:logiciels:blender:bge-python:animrandcolors.gif|}}
 +
 +
 +==== 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["Tic"]
 +    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(),random.random(),random.random(),True)
 +        
 +
 +# Tests de collisions avec envois de messages
 +def sendBoom(cont):
 +    obj = cont.owner
 +    sensor = obj.sensors["Collision"]
 +    if sensor.positive :
 +        msg = "From " + obj.name
 +        obj.sendMessage("boom", msg , sensor.hitObject.name)
 +        
 +
 +# Réception d'un message et ajout d'un objet texte
 +def receiveBoom(cont):
 +    obj = cont.owner
 +    sensor = obj.sensors["Message"]
 +    if sensor.positive :
 +        print("Message : " + str(sensor.bodies))
 +        
 +        # Récupération du contenu du message et séparation des mots dans un tableau
 +        # message[0] est le premier élément, ici "From"
 +        # 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'objet Text associé au Cube et au Sol
 +        textName = obj.name + "Text"
 +        
 +        # Ajout de cet objet dans la scène
 +        # Arguments : nom de l'objet, nom de l'objet où il va être positionner, durée de vie (ici 100 images)
 +        obj.scene.addObject(textName, textName, 100)
 +        
 +        # On modifie ensuite le texte et la position de l'objet Text en question       
 +        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)/10,random.randrange(10)/10,random.randrange(10)/10,True)
 +</code>
 +++++
 +
 +===== Autres exemples =====
 +  * Fichier Blender et les textures : {{:logiciels:blender:bge-python:bge-python-05.zip|}}
 +
 +
 +{{:logiciels:blender:bge-python:animpythonrunanim.gif|}}
 +
 +Jouer une animation et changer d'images au hasard dans une texture.
 +==== Objets ====
 +{{:logiciels:blender:bge-python:bge-python-08.png|}}
 +
 +
 +==== script04.py ====
 +
 +++++ Voir le script |
 +<code python>
 +"""
 +Jouer une animation et changer d'images de textures
 +"""
 +
 +import bge
 +from bge import texture
 +from bge import logic
 +import random
 +
 +# Jouer une animation
 +def runAnim(cont):
 +    obj = cont.owner
 +    sens = cont.sensors['ToucheEspace']
 +    if sens.positive:
 +        # Déclenchement de l'animation
 +        obj.playAction("MonJoliCube0Action",0,500,play_mode=logic.KX_ACTION_MODE_PLAY,speed=3)
 +
 +
 +# Changer d'images de texture
 +# Un dossier "./mestextures/murs/" avec 10 images
 +# dont le nom des fichiers suit la logique "mur0.jpg", "mur1.jpg", "mur2.jpg", etc.
 +def randTexture(cont):
 +    # Nombre d'images dans le dossier textures
 +    max=6
 +    obj = cont.owner
 +    # Un capteur quelconque
 +    sens = cont.sensors['Tic']
 +    if sens.positive:
 +        # Image orginale de la texture
 +        ID = texture.materialID(obj, "IMmur0.jpg")
 +        object_texture = texture.Texture(obj, ID)
 +        obj.attrDict["tex1"] = object_texture
 +        # Tirage d'un nombre au hasard et conversion en String pour former le nom de l'image
 +        n = str(random.randrange(max))
 +        # Chemin de l'image
 +        url = logic.expandPath("//textures\mur"+n+".jpg")
 +        new_source = texture.ImageFFmpeg(url)
 +        object_texture.source = new_source
 +        object_texture.refresh(False)
 +</code>
 +++++
 +==== Voir aussi ===
 +Des variables peuvent être accessibles depuis toutes les scènes avec [[https://www.blender.org/api/blender_python_api_2_77_release/bge.logic.html?highlight=globaldict#bge.logic.globalDict|bge.logic.globalDict]].
 +
 +Manipuler un actionneur "Motion" : move.dLoc = [0.0, speed, 0.0]
 +
 +Pour les notions de distances entre objet et d'alignement : getDistance, rayCast, actionneur "TrackTo", alignTo...
 +
 +Pour communiquer avec d'autres logiciels, on peut utiliser la bibliothèque OSC : [[http://wiki.labomedia.org/index.php/Communication_entre_Pure-data_et_Blender_en_OSC|exemple avec Pure Data]] et [[https://github.com/sergeLabo/blenderOSC|blenderOSC]]
 +
/home/resonancg/www/wiki/data/attic/logiciels/blender/bge-python/accueil.1459443993.txt.gz · Dernière modification: 2016/03/31 19:06 de resonance