Tutoriels - Flash - Maths Physique fichier source



Propriétés Physiques La Gravité (écrit par Jérémie )

Pour soumettre un objet à la gravité




intro

première partie d'un tutoriel sur les propriétés physiques, on va apprendre à utiliser la gravité.

prérequis

connaître bien le drag'n drop avancé, avoir quelques notions de physique (encore que ...)


étape 1 - propriétés & drag'n drop

créez un premier clip 'balle'. dessinez une balle et convertissez-la en symbole (F8).

éditez ses actions (bouton droit > actions).
on commence par entrer les propriétés de la gravité, au chargement du clip, en mode expert écrivez :

onClipEvent (load) {
gravite = 12;
rayon = this._width/2;
}


rayon est simplement le rayon de la balle, il servira plus tard.

éditez le clip 'balle', et convertissez le dessin de la balle en bouton appelé 'drag'. (voir drag'n drop)
éditez les actions du bouton, et comme ci-dessus, écrivez :

on (press) {
deplacement = true;
}
on (release, releaseOutside) {
deplacement = false;
}



étape 2 - onClipEvent(enterFrame)


passons aux choses sérieuses, dans les actions de la balle (pas du bouton) écrivez :

onClipEvent (enterFrame){
// pour déterminer la vitesse :

// si l'objet est déplacé (drag):
if (deplacement) {
this._x = _root._xmouse;
this._y = _root._ymouse;

}else{
// placement de l'objet & contraintes

}



trois blancs ont été laissés exprès.
nous allons :
- déterminer la vitesse du mouvement
- déplacer l'objet en fonction de cette vitesse & de la gravité.
- ajouter les contraintes des rebords de l'image.

voyons comment determiner la vitesse.
on ne cherche pas une vitesse réelle (km/h), simplement un valeur qui varie en fontion de la vitesse, peu importe l'unité.
on a besoin de deux vitesse différentes, la vitesse sur l'axe des x et la vitesse sur l'axe des y.

le code est lu en boucle
on va donc récupérer les coordonnées de la balle à un instant donné, puis de nouveau lors de la lecture suivante. la différence entre ces coordonnées nous donnera la vitesse de déplacement.
comme c'est le drag'n drop qui détermine les vitesses de départ (vitesses x et y), on placera le premier calcul de ces vitesseslors du drag'n drop.
nous les modifierons ensuite en fonction de la gravité.

dans le premier blanc du code, ecrivez :

oldx = x;
oldy = y;
x = this._x;
y = this._y;

dans le deuxieme blanc (au dessus du else) on écrira :

vitessex = (x-oldx)*10;
vitessey = (y-oldy)*10;


reste à déterminer les coordonnées une fois l'objet laché. dans le dernier blanc :

vitessey += gravite;
x += (vitessex/10);
y += (vitessey/10);
// *** emplacement pour les contraintes
this._x = x;
this._y = y;


remarque:
seul la vitesse y est soumise à la gravité.

sur l'axe des y, si la balle est lancée (ou se déplace) vers le haut,
la vitesse (y-oldy)*10 sera négative. le fait de lui ajouter un nombre positif va donc la diminuer. au contraire, si elle se deplace vers le bas, la gravité va l'accélerer.

multiplier et diviser par 10 n'est pas obligatoire. ce n'est pas très important dans ce tutoriel ce sont des maths pures. sans ces opérations, pour un mouvement correct, la gravité devrait s'echelonner de 1 à 1,5, tandis que là, on la fait varier de 10 à 15.

il ne reste plus qu'à s'occuper des contraintes du cadre. pour ce tutoriel, la balle ne rebondit pas.

c'est ici que rayon va nous servir, pour savoir si la balle touche un bord, on ajoute le rayon aux coordonnées de son centre.
(_x et _y)
à l'emplacement réservé, écrire :

// si y touche le haut du cadre sa vitesse s'inverse (la balle retombe)
if (y<rayon) {
vitessey = -vitessey;
}

if (y>(_root.hauteur-rayon)) {
y = _root.hauteur-rayon;
}

if (x<rayon) {
x = rayon;
}

if (x>(_root.longueur-rayon)) {
x = _root.longueur-rayon;
}


rien de bien difficile, même si le résultat de ce côté là n'est pas encore terrible, puis l'objet n'est pas soumis aux frottements, un tutoriel suivra pour faire des rebonds corrects & des frottements.




Tous droits réservés 2003 Jérémie Cook