« 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): 4018
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): 4018
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): 4018
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
[WIP] et travaux terminés [terminé] Chaussures Très Réalistes (.bend disponible) 2 30 Hier 23:41:16
WinZs 
The Blender Clan 'tchat Addon convertisseur d'images en courbes 2 30 Hier 20:29:31
Rimpotche 
[WIP] et travaux terminés [WIP] Scène de Pti dej à la Française - EVEE a donf - 2.9 Blender 4 66 Hier 19:55:33
meltingman 
The Blender Clan 'tchat Pour les arboriculteurs 3D 1 36 Hier 18:05:18
moonboots 
Hors Sujet !! Faire parler son personnage en 5 minutes - tutoriel Francais - Blender 2.9 4 73 Hier 13:03:28
meltingman 
GIMP Faire un drégradé selon la forme sous gimp 9 63 Hier 12:49:57
Thewada 
Questions & Réponses [résolu] Perte des Vertex lors d'un Separate 7 65 21/10 21:45:05
debutant 
[WIP] et travaux terminés [terminé] Pantin articulé    [1][2] 12 6690 21/10 18:53:51
meltingman 
Questions & Réponses hdri en mode ombrage 1 61 20/10 21:14:15
moonboots 
[WIP] et travaux terminés Moderno 404    [1][2] 11 395 20/10 15:53:21
Rimpotche 
Hors Sujet !! Une citrouille en 13 clics - Tutoriel - Blender 2.9 2 133 19/10 23:40:15
meltingman 
Hors Sujet !! un banc de dauphin - tutoriel - workflow sculpte > bake - 2.9    [1][2] 12 404 19/10 23:36:41
meltingman 
Questions & Réponses [résolu] Particule réaliste pour un sprite    [1][2] 12 631 19/10 13:39:34
Redstar 
Questions & Réponses Eevee : chevauchements en profondeur 4 161 19/10 11:46:51
meltingman 
Questions & Réponses Dans Blender 2.9, rendre une animation avec seulement la réflexion    [1][2] 16 542 19/10 11:08:45
ludo66 
Questions & Réponses Besoin de vos retours ici sur les changements 2.9    [1][2][3] 20 577 18/10 16:02:23
meltingman 
The Blender Clan 'tchat Moniteur endommagé 2 345 18/10 11:59:42
Rimpotche 
The Blender Clan 'tchat Architecture / squelette du futur BC2.0    [1][2][3]...[5] 42 1122 18/10 10:38:14
WinZs 
Moteur de jeu GameBlender et alternatives [WIP] Jeu "Iron Man Collapsing"    [1][2][3][4] 30 12280 17/10 16:05:54
timeman13 
Questions & Réponses Affiner les contours d'un feu 0 349 15/10 19:37:36
Scylla 

Qui est en ligne
184 utilisateur(s) en ligne (dont 107 sur Forums)

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


plus...
Nouveaux membres
Romaine198 23/10/2020
MerryMeado 22/10/2020
VonB53421 22/10/2020
MarjorieCa 22/10/2020
Latisha86Z 22/10/2020
WileyMcclo 22/10/2020
DorieFlw44 22/10/2020
LarrySimch 22/10/2020
EmoryNecai 22/10/2020
JanieShock 22/10/2020
Dernier Ajout
mirages-preview~0.jpg

Evènements à venir
Nov 18
Anniversaire de RichDeg
Dec 29
Anniversaire d'ebrain
Jan 9
BUG de Lyon
plus 264 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