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

Posté par Oracle le 25/8/2011 16:35:59
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...

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