« 1 (2) 3 4 5 »


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
_________________
I love GameBlender

3DMagixPro, IllusionMage, 3DMagix : Scam !
Créer un fichier PDF de la contribution Imprimer


Re: Simulateur d'entrepôt, script et BGE : comment faire bouger un objet ?
OverdOzed
Inscrit:
18/03/2007 16:25
De + De = Quat?
Post(s): 416
J'ai fait une erreur et négligé un paramètre dans mon code.
Tout d'abord, l'avancement c'est:
(positionX - positionDepart) / (positionArrivee - positionDepart)

Et non pas ce que j'ai marqué avant. Honte sur moi.

Ensuite, à moins que ton script ne soit appelé à intervalles non variables, il va falloir faire intervenir un facteur temps, genre par exemple exécution toutes les 2 milisecondes.

J'ai testé ce script dans unity, il fonctionne (attention, syntaxe uniscript) :
var object:Transform;
var posArrivee:float = 6.0;
var avancement:float;
var posDepart:float = 0.0;

function Update () {
	//print(object.position.x);
	if(object.position.x <= posArrivee)
	{
		avancement = (object.position.x - posDepart)/(posArrivee - posDepart);
		if ( avancement == 0 ) { avancement = 0.001; }
		object.position.x = object.position.x + (1.0 - (2.0 * avancement - 1.0)*(2.0 * avancement - 1.0))/20;
		print(avancement);
	}
}


J'ai divisé par 20 le résultat de f(x), pour avoir un mouvement de départ plus lent. Je n'ai pas utilisé de puissance 2, apparemment je ne connaît pas la syntaxe exacte...

Edit : une image de la fonction f(x) = 1-(2x-1)²

Sachant que l'avancement est forcément compris entre 0 et 1, tu vois sur quel intervale on travaille...

Contribution le : 25/08/2011 16:35
Créer un fichier PDF de la contribution Imprimer


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 !
Créer un fichier PDF de la contribution Imprimer


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
Bon, ben pour me sentir moins seul, je trouve quelques solutions et je me réponds à moi-même.

D'abord, félicitations à moi-même! J'ai fini par avancer un peu et comprendre quelque trucs.
Alors je me les écrit ici, comme ça si je reviens demain et que je ne me rappelle pas tout, je retrouverai mes notes.

1) import bpe
Ca remplace import bpy, et ce n'est utilisable que dans une script destiné au Game Engine.
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.

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 ???)

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).

Voilà, si quelqu’un passe dans le coin et se sent l’âme d’un commentateur, qu’il profite de l’occasion.
Dans le cas contraire, je continuerai d’approvisionner ce sujet comme si c’était mon blog

A mon prochain passage (demain) je mettrai sans doute (enfin) un .blend à (ma) disposition.

Contribution le : 31/08/2011 12:54
_________________
Sans difficulté il n'est point de progrès !
Créer un fichier PDF de la contribution Imprimer


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".
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"

Contribution le : 31/08/2011 14:55
Créer un fichier PDF de la contribution Imprimer


Re: Simulateur d'entrepôt, script et BGE : comment faire bouger un objet ?
OverdOzed
Inscrit:
24/07/2008 00:45
De Paris
Post(s): 3447
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) :
if not hasattr(gl, "avancement") :
	gl.avancement = 0


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
_________________
Tuto MaPZone
Créer un fichier PDF de la contribution Imprimer


Re: Simulateur d'entrepôt, script et BGE : comment faire bouger un objet ?
OverdOzed
Inscrit:
18/03/2007 16:25
De + De = Quat?
Post(s): 416
Cool, il y a enfin des réponses. J'en profite pour poser mes question alors.
Je pensais sincèrement pas que ma méthode était bonne pour le BGE. Du coup, je me demande s'il n'y aurait pas moyen d'utiliser l'avancement sur une IPO au lieu de faire un calcul à chaque frame. Comme ça, on pourrait par exemple utiliser une courbe de Gauss sans manger les fps...

Contribution le : 01/09/2011 07:01
Créer un fichier PDF de la contribution Imprimer


Re: Simulateur d'entrepôt, script et BGE : comment faire bouger un objet ?
OverdOzed
Inscrit:
24/07/2008 00:45
De Paris
Post(s): 3447
Entre lire une IPO et calculer un exp(-x²), ça se vaut je pense.

Contribution le : 01/09/2011 11:44
_________________
Tuto MaPZone
Créer un fichier PDF de la contribution Imprimer


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
Citation :

Bobibou a écrit:
Entre lire une IPO et calculer un exp(-x²), ça se vaut je pense.


Calculer peut-être, mais insérer un temps d'attente à chaque itération pour pouvoir voir bouger l'objet en temps réel,
si je veux éviter les saccades, ça ne va pas être plus "lourd" que de définir (dynamiquement) et lire une F-Curve ?

En tout ca, merci de votre soutien. Je n'ai pas pu continuer pendant ma pause de ce midi, mais je m'y colle prochainement.

Contribution le : 01/09/2011 12:36
_________________
Sans difficulté il n'est point de progrès !
Créer un fichier PDF de la contribution Imprimer


Re: Simulateur d'entrepôt, script et BGE : comment faire bouger un objet ?
OverdOzed
Inscrit:
24/07/2008 00:45
De Paris
Post(s): 3447
Mais il n'y a pas de temps d'attente à ajouter normalement...

Contribution le : 01/09/2011 13:55
_________________
Tuto MaPZone
Créer un fichier PDF de la contribution Imprimer



 Haut   Précédent   Suivant
« 1 (2) 3 4 5 »




Enregistrer votre réponse
Compte*
Nom   Mot de passe   Authentification
Message:*



[Recherche avancée]



Sujets récemment répondus
Forums Sujets Réponses Lus Dernières contributions
Hors Sujet !! Sinoceratops project - Ateliers suivies de A à l'Animation 8 147 Hier 22:29:38
meltingman 
Questions & Réponses [non résolu] [Blender 2.9] Halo de type star ? 2 24 Hier 19:00:28
JDragonB 
Graphisme alternatif faire de la bd avec blender    [1][2][3] 24 447 Hier 17:57:17
blend74 
Questions & Réponses [résolu] Définir la résolution d'un curve converti en mesh    [1][2] 10 103 Hier 10:13:48
Arielboid 
Questions & Réponses Plan de découpage 2D à partir d'un low poly ? 5 56 22/06 17:06:08
pinockenstein 
Hors Sujet !! les tutos de Moonboots    [1][2][3]...[15] 144 10302 21/06 15:30:37
moonboots 
[WIP] et travaux terminés Nature - Court-métrage    [1][2] 15 730 21/06 06:21:39
Bibi09 
Questions & Réponses [résolu] Probleme Papercraft sous Blender 7 216 19/06 21:44:21
Larryon 
Python & Plugins [terminé] City pack Cars pour Blender 1 115 18/06 18:07:21
meltingman 
Questions & Réponses prb tuto crash car/rigid body    [1][2] 12 264 17/06 18:54:54
belomaker 
The Blender Clan 'tchat Avenir du blender clan    [1][2][3]...[23] 222 26440 17/06 10:34:03
Riggelm 
Graphisme alternatif Un court-métrage apocalyptique en 2D ! 3 2293 16/06 18:23:28
moonboots 
Dessin traditionnel Dessins - BlendX 8 14299 16/06 16:41:23
blend74 
Graphisme alternatif Monster Mash    [1][2] 15 449 16/06 16:22:01
blend74 
Questions & Réponses [résolu] Placer mon world 7 156 16/06 09:13:57
Lylo 
Questions & Réponses [non résolu] animation : décalage d'un objet avec "Follow path"    [1][2] 12 255 16/06 05:57:44
blendinfos 
Questions & Réponses Different move value for parent or child - Distances différentes pour un parent ou un enfant 0 248 16/06 04:12:14
Gazpart 
Moteur de jeu GameBlender et alternatives [WIP] DeadSigns FPS horreur - Version alpha disponible + discord    [1][2][3]...[67] 667 139641 15/06 08:58:37
Hook 
Questions & Réponses [non résolu] Plusieurs object qui avance sur une ligne trajectoire 9 606 14/06 18:29:34
blendinfos 
Questions & Réponses [non résolu] animer 2 objets ensemble, puis les séparer 2 102 14/06 11:43:57
blendinfos 

Qui est en ligne
108 utilisateur(s) en ligne (dont 62 sur Forums)

Membre(s): 0
Invité(s): 108


plus...
Nouveaux membres

Nemo
11/3/2021
qingjie 10/3/2021
Kask909 9/3/2021
marie-antoinette 7/3/2021
Bugs 7/3/2021
lolorogli75 4/3/2021
Flagiel 4/3/2021
thedeathclown 1/3/2021
Littlespoon 28/2/2021
luxperpetua 27/2/2021
Dernier Ajout
2020-09-24.jpg

Evènements à venir
Jui 30
Anniv des Jedi :-D
Jui 10
BUG de Lyon
Jui 23
Anniv du BlenderClan !
plus 255 plus d'élément(s)
 Par Mickaël Guédon [ebrain] © 2003-2021 The Blender Clan - hébergé par TuxFamily - Site déclaré à la CNIL sous le numéro 1155445