« 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): 4014
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): 4014
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): 4014
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
Moteur de jeu GameBlender et alternatives hARMful engine    [1][2][3]...[7] 64 5946 Aujourd'hui 01:54:45
Bibi09 
Moteur de jeu GameBlender et alternatives [WIP] Jeu "Iron Man Collapsing"    [1][2][3] 27 8710 Aujourd'hui 01:39:39
Bibi09 
Questions & Réponses [non résolu] Problème d'importation de svg 4 139 Hier 22:07:43
Joknox 
Questions & Réponses Problème avec le nodes Color Ramp 1 33 Hier 20:43:47
Rimpotche 
Questions & Réponses Disparition des Mesh.. 2 33 Hier 19:09:09
Loan20 
Questions & Réponses Animation NLA probleme origine 8 120 Hier 16:45:50
prometheusx 
Questions & Réponses alleger le poid de mon modele 5 69 Hier 16:39:51
Rimpotche 
Questions & Réponses Comment faire une boucle infinie (animation) 8 89 Hier 13:56:51
moonboots 
Questions & Réponses Ajouter un raccourcis a un addon. 0 22 Hier 13:35:40
pierre-y 
Python & Plugins Pouvoir choisir l'outil actif avec python 1 52 Hier 13:20:16
pierre-y 
Questions & Réponses Exporter en FBX sur un ordi Japonais 1 114 Hier 13:01:33
tsurubaso 
Mes premières images sous Blender (débutants) Kame-House    [1][2] 15 521 Hier 08:17:56
Huildecoude 
Questions & Réponses transparence image as plane 3 118 24/05 21:48:30
ansic 
Le coin des geeks Multi-GPU Eevee 0 45 24/05 19:41:55
Poutrator 
Questions & Réponses Conseils pour modéliser un corps 0 55 24/05 18:00:46
GFC 
Python & Plugins Slider sur une shapekey en python.    [1][2] 13 265 24/05 17:44:19
Rimpotche 
Questions & Réponses [non résolu] Usage du CPU (hors rendu) 6 218 23/05 21:16:49
lapineige 
Questions & Réponses [non résolu] Artefacts après textures PBR 0 62 23/05 18:47:13
Laorz 
Python & Plugins [non résolu] Un équivalent de "break" et "continue" pour une boucle ? 3 130 22/05 14:47:21
lucky 
Moteur de jeu GameBlender et alternatives [WIP] DeadSigns FPS horreur - Reprise du développement    [1][2][3]...[50] 499 86611 22/05 12:39:00
Hook 

Qui est en ligne
71 utilisateur(s) en ligne (dont 21 sur Forums)

Membre(s): 3
Invité(s): 68


JohnieRene, InaPort723, CharmainDo, plus...
Nouveaux membres
InaPort723 26/5/2020
CharmainDo 26/5/2020
Beau53E530 26/5/2020
JohnieRene 26/5/2020
BetteSoube 26/5/2020
ManuelaHei 26/5/2020
Minna8703 26/5/2020
DeandreDur 26/5/2020
Isabell74E 26/5/2020
BeulahMull 26/5/2020
Dernier Ajout
mirages-preview~0.jpg

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