Chuter avec classe

Simulation sans pretention

Une fois n’est pas coutume, suite à une demande qui m’a été faite récemment en Flash, je me permets de diffuser un petit morceau de code pondu ( vous pensiez que les lignes de codes apparaissaient par magie peut-être ? non un developpeur pond du code c’est connu et prouvé !) à la pause-café.

Ce code est à destination de ceux qui cherchent à donner un petit effet “gravité” à certains de leurs objets sans pour autant être amené à utiliser des moteurs physique comme cet excellentissime APE d’Alec Cov, si bien illustré d’ailleurs par Fab de la Fabrick (je vous invite à lire son blog si vous vous intéressez aux technologies “Flash” (Flash, Flex, Air,...) ).

Bref trêve de bavardage et voici pour les débutants en Actionscript 2, les quelques lignes décrivant la classe permettant d’obtenir ce type d’effet :

  1. class Corps extends MovieClip {

  2.  

  3. public var _obj:MovieClip;

  4. private var _ymax:Number;

  5. private var _yinit:Number;

  6. private var _groundPos:Number;

  7. private var _gravity:Number;

  8. private var _friction:Number;

  9. private var _speed:Number;

  10. private var _fall:Boolean;

  11. private var _idInt:Number;

  12.  

  13. //Le constructeur prend en paramètre, la référence du MovieClip

  14. //concerné par la chute et la position du sol.

  15. public function Corps(myObj:MovieClip, myGround:Number) {

  16. _obj = myObj;

  17. _ymax = yinit=obj._y;

  18. _groundPos = myGround;

  19. _speed = 0;

  20. _gravity = 1;

  21. _friction = 1;

  22. _fall = (_groundPos-_ymax>0) ? true : false;

  23. }

  24. //Méthode public déclanchant l’action

  25. public function launch() {

  26. _idInt = setInterval(this, “move”, 25);

  27. }

  28. private function stopMove() {

  29. clearInterval(_idInt);

  30. }

  31. //Methode permettant de mouvoir l’objet

  32. private function move() {

  33. _speed += _gravity/9.81;

  34. _obj._y = (_obj._y_speed<_groundPos) ? obj.y_speed : _groundPos;

  35. if (!_fall && _speed>0) {

  36. _fall = true;

  37. _ymax = obj.y;

  38. }

  39. updateAfterEvent();

  40. checkMove();

  41. }

  42. //Methode de vérification de la position de l’objet

  43. //et de sa vitesse, si l’objet touche le sol il repart en

  44. //sens inverse, sa vitesse diminue néanmoins à cause des frottements au sol

  45. private function checkMove():Boolean {

  46. if (_groundPos-_ymax<1) {

  47. _obj._y = _groundPos;

  48. stopMove();

  49. return false;

  50. }

  51. if (_obj._y>=_groundPos) {

  52. _speed -= _friction;

  53. _speed *= -1;

  54. _fall = false;

  55. }

  56. }

  57.  

  58. public function reset() {

  59. stopMove();

  60. _obj._y=_yinit;

  61. }

  62. public function set speed(val:Number) {

  63. _speed = (val>0) ? val : 0;

  64. }

  65. public function set friction(val:Number) {

  66. _friction = (val>0) ? val : 0;

  67. }

  68. public function set gravity(val:Number) {

  69. _gravity = (val>0) ? val : 0;

  70. }

  71. }

Mise en oeuvre :

  1. import Corps;

  2. //pierre : reference au nom d’occurence de l’objet sur la scene

  3. //Stage.height: détermine la hauteur de la scene (position du sol)

  4. var oCorps:Corps = new Corps(pierre, Stage.height);

  5. //parametrage

  6. oCorps.gravity = 10;

  7. oCorps.friction = 4;

  8. oCorps.speed = 2;

  9. //lancement

  10. oCorps.launch();

Bien entendu on pourrait améliorer ceci avec par exemple une gestion de callback permettant par exemple de détecter l’impact, pour ainsi modifier les caractéristiques ou l’apparence de l’objet ou de son entourage. J’en ferai une version AS3 prochainement car il faut vivre avec son temps, parait-il…

Voici le résultat :

Cette animation necessite le Flash PLayer 9

Voir les sources.

Si vous avez apprécié cet article, s'il vous plait, prenez le temps de laisser un commentaire ou de souscrire au flux afin de recevoir les futurs articles directement dans votre lecteur de flux.

Commentaires

Hey sympa :)

Pas sûr que tu fasses fureur auprès des nanas avec ce billet par contre :p

(Certes, tu n’as pas besoin de ton blog pour, on est d’accord)

[DevFullJava] moi,j’aime pas les variables qui commencent par un underscore… [/DevFullJava]

Quoi? J’ai dit quelque chose moi ?

@Super Chinois : merci :p
@Chris:Wai mais je les normalise de cette facon car je les distingue mieux des variables locales, mon cerveau mouline donc plus vite

waouh ca fait rever… :P

mais qu’est ce qui se passe ici…..

Je sais Jane…En ce moment je suis préoccupé par diverses choses et de préoccupations en préoccupations, l’imagination perd de sa fertilité et la plume reste impuissante.

Laisser un commentaire

(requis)

(requis)