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/04/01 10:26]
resonance [script02.py]
logiciels:blender:bge-python:accueil [2018/04/06 16:27] (Version actuelle)
resonance [Game Object]
Ligne 358: Ligne 358:
 my_object = my_scene.objects['MonJoliCube0'] my_object = my_scene.objects['MonJoliCube0']
 </code> </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.1459499174.txt.gz · Dernière modification: 2016/04/01 10:26 de resonance