Re: Simulateur d'entrepôt, script et BGE : comment faire bouger un objet ?

Posté par Speedlight le 31/8/2011 14:55:35
Citation :
Dans cette page fort intéressante, il utilise gl. mais lorsque je fais pareil, j'ai un message "gl is not defined".
http://www.highspeedracer.webou.net/tuto.php?id=21


Ton message d'erreur signifie que la variable "gl" n'est pas definie, entre autre, qu'elle existe pas parce que tu ne l'as pas créée.
La variable "gl" est souvent utilsée dans le bge pour remplacer le bge.logic (2.5) ou le GameLogic (2.49b)
gl = GameLogic
cont = GameLogic.getCurrentController()


Citation :
Pourquoi un Actuator Motion utilisant "Force" au lieu de "Loc" ne fonctionne que sur des objets sans Parent ?


L'actuator motion utilisant force s'applique sur un objet n'etant pas dependant d'un autre objet, ce qui altere ces propriétées physiques.
Un parentage force un objet a toujours rester a telle ou telle distance de l'objet. Si c'est en Loc, blender va modifier la position du child pour le parentage.

Citation :
Puisque l'appel d'un script se fait au niveau du Controller, comment appeler un Actuator Motion dans ce script,
alors que justement la présence du Controller de type Python se passe de liaison vers un Actuator ?
Faut-il le créer dynamiquement ?


Pourquoi veut tu te passer de liaison ? Avec liaison:

gl = GameLogic
cont = gl.getCurrentController()
Actuator = cont.actuators["nom_de_l'actuator"]


Sans il suffit d'utiliser l'objet. Par exemple:

gl = GameLogic
Objs = gl.getCurrentScene().objects
Actuator_Recherché = Objs["L'objet"].actuators["L'actuator_Recherché"]


Mais je ne suis pas sur de la methode pour lister les objets, je ne l'ai jamais utilisé.

Citation :
La commande "Run script" provoque donc une erreur, qui ne sera pas présente lorsque le script sera exécuté en mode Game.
C'est méchant, mais c'est nécessaire de le savoir. Et tant pis si je suis le seul (pardon, étais le seul) ici à l'ignorer.


Oui car la commande "Run Script" est propre a Blender, c'est donc une API carrement differente du BGE qui est attendue.

Citation :
2) le mouvement
Dans une boucle for..., je défini à chaque itération la nouvelle position de mon objet. Si j'effectue du même coup
un print(position) pour voir les résultats dans la console, tout semble correct, mais mon objet est affiché
uniquement à sa position de départ et d’arrivée. Pas de mouvement visible, donc, mais un saut unique.
J’imagine qu’il manque une commande de rafraîchissement ou quelque chose dans le genre
(mais si c’est le cas, alors pourquoi l'objet est quand-même visible à sa position d’arrivée ???)


En fait, lorsque tu utilise un script, il est excuté entierement avec ces boucles et tout le tralala, puis laisse la main a blender.

Moment 1:
Position de l'objet = [0, 0, 0]

Moment 2:
Execution du script:
____ Boucle:
__________ Pos = Pos[x]+1
__________ Print Pos
____ Fin

Moment 3:
Une nouvelle frame se lance, actualisation de blender, et des coordonnée de l'objet.

En fait, la position de ton objet a pris toutes les valeures d'un coup, s'est arreté a la derniere, et blender a repris la main apres l'execution du script.
Pour bien te rendre compte, fait des tests avec le module time.
Tu fait une scene animée, puis tu rentre ce script avec relié au controller python une brick "always" "true pulse on":

import time
time.sleep(0.5)


Le script demande juste qu'a chaque execution du script, il fasse une pause de 0.5 secondes.

Citation :
3) Keyboard Sensor
Le lancement d’un script par l’enfoncement d’une touche effectue en fait deux fois le script,
Une fois à l’enfoncement et une fois au relâchement. Pour éviter cela il suffit d’activer l’option Tap du Sensor.
Mais il semble que cela ne fonctionne pas toutes les fois (encore à vérifier).


Ou alors tu créé ton script en fonction, et tu englobe le lancement de celle ci dans une condition telle que:

gl = GameLogic
Sensor = gl.getCurrentController().sensors["Nom du sensor"]

if Sensor.positive == True:
    laDitFonction()


Note: "Sensor.NEGATIVE == True" n'existe pas, je pensais, mais non. Il se traduit simplement par "Sensor.POSITIVE == False"

Cette contribution était de : http://blenderclan.tuxfamily.org/html/newbb/viewtopic.php?forum=3&topic_id=31843&post_id=392491