|
Re: Simulateur d'entrepôt, script et BGE : comment faire bouger un objet ? |
|
---|---|---|
Fou Furieux du Clan
![]() ![]() Inscrit:
16/06/2010 18:25 Post(s): 177
|
J'ai pas bien compris le truc de la parabole ni celui du delta x mais si tu utilise des fonctions de blender utilisable en dehors de blender (bpy), elles ne fonctionneront pas dans le bge. Personnellement, pour la variation de vitesse j'aurais mis plusieurs actuators motion de valeur différentes s'actionnant l'un aprés l'autres grâce à une property timer. Le paramètre force des actuators motion appliquent une force qui fait accélérer l'objet au début. Sinon regarde la: http://www.highspeedracer.webou.net/tuto.php?id=21
Contribution le : 25/08/2011 15:37
|
|
![]() ![]() |
|
Re: Simulateur d'entrepôt, script et BGE : comment faire bouger un objet ? |
|
---|---|---|
OverdOzed
![]() ![]() Inscrit:
27/07/2005 12:25 De ce petit pays neutre avec des montagnes et du chocolat
Post(s): 4021
|
Je patauge encore sans vraiment avancer.
Je n'arrive toujours pas à trouver une méthode pour déplacer un objet dont les coordonnées sont définies dans un script. pierro8 me dit que la "commande" bpy. ne fonctionne pas dans BGE, mais ne dit pas ce qu'il faut utiliser à la place. 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 Pourquoi un Actuator Motion utilisant "Force" au lieu de "Loc" ne fonctionne que sur des objets sans Parent ? 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 ? Oracle : je regarderai tes propositions de plus prés dès que j'aurais passé des réponses à ces questions, merci de ton aide. [edit] Essai du lendemain, je vais voir ici : http://www.blender.org/documentation/blender_python_api_2_59_0/contents.html Je constate que BPY est remplacé par BGE, youpie, génial, ça y est, j'essaie : ImportError: no module named bge Bon alors c'est quoi que j'ai encore raté ???
Contribution le : 29/08/2011 11:54
|
|
_________________
Sans difficulté il n'est point de progrès ! ![]() |
||
![]() ![]() |
|
Re: Simulateur d'entrepôt, script et BGE : comment faire bouger un objet ? |
|
---|---|---|
Fou Furieux du Clan
![]() ![]() Inscrit:
17/02/2010 12:11 Post(s): 238
|
Citation :
Dans cette page fort intéressante, il utilise gl. mais lorsque je fais pareil, j'ai un message "gl is not defined". 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)
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, Pourquoi veut tu te passer de liaison ? Avec liaison:
Sans il suffit d'utiliser l'objet. Par exemple:
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. 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 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":
Le script demande juste qu'a chaque execution du script, il fasse une pause de 0.5 secondes. Citation : 3) Keyboard Sensor Ou alors tu créé ton script en fonction, et tu englobe le lancement de celle ci dans une condition telle que:
Note: "Sensor.NEGATIVE == True" n'existe pas, je pensais, mais non. Il se traduit simplement par "Sensor.POSITIVE == False"
Contribution le : 31/08/2011 14:55
|
|
![]() ![]() |
|
Re: Simulateur d'entrepôt, script et BGE : comment faire bouger un objet ? |
|
---|---|---|
OverdOzed
![]() ![]() Inscrit:
24/07/2008 00:45 De Paris
Post(s): 3445
|
Hello mcBlyver !
Ça fait plaisir de te voir du côté BGE de la force. ![]() Ton projet est intéressant, je regrette de ne pas avoir été là plus tôt pour le suivre et t'éviter cette cuisante solitude. ![]() Je commence tout de suite par une remarque qui a déjà été faite mais qu'il est important de définir clairement car on commence tous par se tromper : Blender utilise deux API totalement indépendantes en ce qui concerne Python : - BPY qui sert à créer des add-ons. - BGE qui est utilisée avec le BGE. Elles ont chacun leur rôle et ne peuvent pas en changer, c'est pourquoi BPY ne fonctionne pas avec Run Game et BGE ne fonctionne pas avec Run Script qui est réservé aux add-ons. En effet, un script pour le BGE nécessite un contexte et ne peut par conséquent pas être lancé indépendamment du jeu, il pourrait y avoir des situations illogiques. Ces deux modules sont d'ailleurs clairement séparés dans la doc : http://www.blender.org/documentation/blender_python_api_2_58_release/ Nous n'utiliseront ici que les Game Engine modules et les Standalone modules qui peuvent être utilisés dans les deux API. C'est important pour ne pas se mélanger les pinceaux mais il me semble que tu l'avais compris. Pour le mouvement, je suis l'idée d'Oracle qui est d'interpoler grâce à une fonction mais attention : comme l'a bien expliqué Speedlight, lorsque le script est exécuté, le jeu s'arrête. Donc ce qui se passe avec ta boucle, c'est qu'elle passe par toutes les étapes entre les deux rafraîchissement de l'écran ! Pour y remédier, il faut éliminer ta boucle et utiliser une variable globale servant de repère pour savoir à quelle étape du mouvement on est, une sorte de variable d'avancement. Une variable globale se définit comme ceci : bge.logic.variable = "une valeur" ou gl.variable si tu as choisi de remplacer bge.logic par gl en début de script grâce à la ligne « from bge import logic as gl ». (ou GameLogic.variable en 2.49) Une fois cette variable définie, on peut la réutiliser dans la formule d'interpolation comme étant le X. Mais attention, si tu fais gl.avancement = 0 dans ton script, cette ligne sera lue à chaque fois et l'avancement restera à 0. Il y a donc deux possibilités : - Ou tu crées un script Initialisation.py (ou Init.py ou ce que tu veux d'autre mais c'est plus ou moins une convention) qui ne s'exécute qu'une seule fois, tout au début du jeu, et tu y places la ligne de définition de gl.avancement ; - Ou tu utilises une condition dans ton script qui permet de ne définir gl.avancement uniquement s'il n'existe pas encore. Pour cela, on utilise la fonction hasattr() qui permet de vérifier si un objet possède ou non un attribut (car une variable globale n'est ni plus ni moins qu'un attribut ajouté à l'objet bge.logic ou gl) :
Ensuite, cette variable globale peut être incrémentée à la fin du script pour que l'étape suivante fasse avancer l'objet. ![]() Note : Citation : Note: "Sensor.NEGATIVE == True" n'existe pas, je pensais, mais non. Il se traduit simplement par "Sensor.POSITIVE == False" Tu peux aussi utiliser « if not sensor.positive : », je trouve personnellement que c'est plus clair.
Contribution le : 31/08/2011 22:01
|
|
![]() ![]() |