Forums Développement Multimédia

Aller au contenu

Animation de personnage/mouvement

AS3 CODE Actionscript

25 réponses à ce sujet

#1 venom2506

    Ceinture Blanche

  • Members
  • Pip
  • 13 messages

Posté 08 April 2013 - 17:20 PM

Tout d'abord bonjour!

Voila, c'est très simple et je suppose que ça ne marche pas parce que je fais une erreur de nouveau qui sera flagrante pour n'importe qui. Bref:
voila je fais un petit RPG pour m'amuser et approfondir mes cours AS3, et je suis bloqué" sur un petit truc.
Donc j'ai un perso qui se déplace sur l'écran, je clique quelque part, et il s'y rend, avec une animation et tout et tout (basé sur ce tutorial). Il se trouve que ça marche très bien, sauf que je veux utiliser une classe. Donc, après bien des efforts et du mélange avec la première partie du tutorial du jeu avoider, j'arrive à ça (visiblement j'avais besoin du timer, et ne faites pas attention à la variable Enemy, elle ne sert à rien pour l'instant):


package
{
import flash.display.MovieClip;
import flash.utils.Timer;
import flash.events.TimerEvent;
import flash.events.MouseEvent;
import flash.events.Event;
public class SH1main extends MovieClip
{
  public var enemy:Enemy;
  public var alix:Alix;
  public var gameTimer:Timer;
  public function SH1main()
  {
   alix = new Alix();
   addChild( alix );
   alix.x = 120;
   alix.y = 150;
   gameTimer = new Timer(25);
   gameTimer.addEventListener( TimerEvent.TIMER, onTick );
   gameTimer.start();
  }
  public function onTick( timerEvent:TimerEvent ):void
  {
   var iswalking = false;
   var goX = alix.x;
   var goY = alix.y;
   var movespeed = 0.1;
   var dir = "down";
   stage.addEventListener(Event.ENTER_FRAME, loop);
   function loop(Event)
   {
        // animation handling
        if (iswalking == true)
        {
         alix.w.play();
        }
        else
        {
         alix.w.gotoAndStop(1);
        }
        // direction handling
        alix.gotoAndStop(dir);
        // movement handling
        if ((goY-movespeed)>alix.y)
        {
         alix.y +=  movespeed;
         dir = "down";
        }
        else if ((goY+movespeed)<alix.y)
        {
         alix.y -=  movespeed;
         dir = "up";
        }
        if ((goX-movespeed)>alix.x)
        {
         alix.x +=  movespeed;
         dir = "right";
        }
        else if ((goX+movespeed)<alix.x)
        {
         alix.x -=  movespeed;
         dir = "left";
        }
        if ((goY-movespeed)>alix.y || (goY+movespeed)<alix.y || (goX-movespeed)>alix.x || (goX+movespeed)<alix.x)
        {
         iswalking = true;
        }
        else
        {
         iswalking = false;
        }
   }
   stage.addEventListener(MouseEvent.CLICK, setposition);
   function setposition(MouseEvent)
   {
        goX = mouseX;
        goY = mouseY;
   }

  }
}
}
 

J'ai aussi une classe Alix qui est un copié/collé de la classe Avatar du jeu avoider et qui ne devrait poser aucun problème.
Bon le problème, c'est que maintenant ça ne marche plus très bien, si je puis dire. Les animations ne marchent plus, la vitesse n'est pas constante, c'est l'horreur. Moi qui pensait que juste transférer le code dans une classe des le début serait facile et me simplifierait la tâche plus tard, et bien c'est pas ça. Donc voila, si une âme charitable pouvait m'éclairer de ses lumières, ça serait formidable. Merci d'avance si c'est le cas, sinon, bein... tant pis pour moi.

#2 dldler

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 4163 messages

Posté 09 April 2013 - 08:53 AM

Bonjour venom.

Je pense que tu vas avoir peu de réponse à une telle question, parce qu'elle met les participants des forums devant trop de questions qui rendent difficile l'évaluation du temps nécessaire pour te répondre.

- Tu viens nous voir avec un mix de 2 tutos trouvé ailleurs. Combien de temps pour aller lire et dépouiller les 2 tutos ?
- Tu veux créer une première classe, à partir d'un code que tu ne comprends pas très bien, ça fait beaucoup de choses à expliquer…

En gros, vouloir aller très vite, c'est bien, mais c'est difficile. Vouloir allez trop vite, c'est risquer de prendre de mauvaises habitudes, de coder sans comprendre, de passer à côté des étapes les plus importantes : la conception et la structuration du code.
C'est aussi mal adapté au format des forums : il y est plus efficace de poser une question précise sur un point clairement identifié. Tu auras plus de chance d'avoir une réponse, une réponse claire, formatrice, adapté à ce que l'on devinera de ton niveau.

Voilà.
Moi, ce que je peux faire c'est te conseiller un lien générique sur la question "passer d'un point fla à un point as". Toute la série sur les classes est bien.

Sinon, pour le tuto sur lequel tu te base, je le trouve pas terrible :
- pour expliquer à un débutant
- pour générer de bonnes pratiques
- en plus en anglais :-( …
Tu as de très bons tutos en français sur le wiki de ce forum (notamment tous les exercices pratiques de cette page). Les avantages : c'est en français, l'auteur n'est jamais très loin, et les autres connaissent déjà un peu le contenu.

Sinon, je te fais ma propre proposition de code, qui fait la même chose que celui que tu as trouvé, mais (à mon avis) en mieux, en français, et même plus.
- Ce code déplace le personnage sur de vrais diagonales
- Ce code déplace le personnage avec une vrai vitesse équilibrée
- Ce code est plus malin, plus court et plus clair.
- Et en français…

:D Après, tu fais ton choix.

Je te copie 2 fois le code : une fois brute pour te montrer qu'il est simple.
Puis une fois avec les commentaires assez détaillés (je fais ça parce que je sais que l'accumulation de commentaires dans du code peut être déroutant/effrayant quand on débute. C'est bien pour suivre pas à pas, mais ça rend difficile la vue d'ensemble.

package {
  // Imports
  import flash.display.Sprite;
  import flash.utils.Timer;
  import flash.events.TimerEvent;
  import flash.events.MouseEvent;
  import flash.geom.Point;
  // Classe
  public class Main extends Sprite {
   // Déclarations des variables génériques
   private var timer:Timer;
   private var personnage:Personnage;
   private var etapes:int;
   private var vitesse:Point;
   private var vitesse_absolue:Number = 2;
   private var orientation:int;
   // Code du constructeur (exécuté une seule fois)
   public function Main ():void {
        personnage = new Personnage();
        personnage.orientation.gotoAndStop (1);
        personnage.x = 120;
        personnage.y = 120;
        addChild (personnage);
        stage.addEventListener (MouseEvent.CLICK,deplacement);
        timer = new Timer(10);
        timer.start ();
   }
   // Fonctions (exécutées à la demande)
   private function deplacement (event:MouseEvent):void {
        // Prépare les calculs nécessaires au mouvement
        vitesse = new Point(personnage.mouseX,personnage.mouseY);
        etapes = vitesse.length / vitesse_absolue;
        vitesse.normalize (vitesse_absolue);
        orientation = vitesse.x > -vitesse.y ? 2 : 1;
        orientation += vitesse.x > vitesse.y ? 2 : 0;
        personnage.gotoAndStop (orientation);
        personnage.orientation.play ();
        timer.addEventListener (TimerEvent.TIMER,mouvement);
   }
   private function mouvement (event:TimerEvent):void {
        // Déplace le personnage
        personnage.x += vitesse.x;
        personnage.y += vitesse.y;
        if (etapes-- == 0) {
         timer.removeEventListener (TimerEvent.TIMER,mouvement);
         personnage.orientation.gotoAndStop (1);
        }
   }
  }
}


ATTENTION : l'organisation des orientations du personnage dépend de la méthode du calcul. L'ordre est donc modifié.


Voilà le code commenté :
Spoiler

Si tu as des questions sur ce code, n'hésite pas. Je suis assez présent ces jours-ci.

Voilà les sources.

Fichier(s) joint(s)



#3 venom2506

    Ceinture Blanche

  • Members
  • Pip
  • 13 messages

Posté 09 April 2013 - 09:37 AM

Bonjour venom.
  • Bonjour! Je te remercie déjà pour ta réponse :) Je vais répondre en citant par petits bouts, c'est comme ça que je préfère m'organiser. J'espère que tu n'es pas réfractaire à cette présentation, je sais que certaines personnes le prennent comme si le but était de pinailler chaque point, ce n'est pas mon intention, je préfère répondre à tout de cette manière, ça m'évite d'écrire à la volée, ce qui se traduit généralement par un fleuve de texte indigeste et d'ailleurs je sens que je suis parti pour faire ça donc point suivant :P
Je pense que tu vas avoir peu de réponse à une telle question, parce qu'elle met les participants des forums devant trop de questions qui rendent difficile l'évaluation du temps nécessaire pour te répondre.
  • Oui, je me doutais un peu que c'était assez lourd, mais comme ça fait un bout de temps que je cogite dessus sans succès, j'ai quand-même tenté ma chance, après tout, on ne sait jamais!
- Tu viens nous voir avec un mix de 2 tutos trouvé ailleurs. Combien de temps pour aller lire et dépouiller les 2 tutos ?
  • J'ai juste mis les deux tutos au cas où ça intéraisserait les gens, j'ai joint mon code entier afin que les gens n'aient justement pas à perdre de temps dessus, je ne suis pas venu en espérant qu'ils vont se taper les 15 pages comme je l'ai fait, ça ne serait pas très correct. Je m'excuse tout de même si c'est trop indigeste, si (quand :P) j'aurais d'autres questions, je ferais en sorte de faire quelque chose de beaucoup plus conçis.
- Tu veux créer une première classe, à partir d'un code que tu ne comprends pas très bien, ça fait beaucoup de choses à expliquer…
  • Oh, non, j'ai déjà fait du code avec d'autres classes, je bosse aussi sur une sorte de shoot avec lequel je n'ai pas trop de problèmes, là je me tourne vers vous parce que vraiment ce qui ne fonctionne pas m'échappe, j'ai passé des heures à réfléchir au code et ce que j'avais fait différemment, j'ai copié collé d'autres classes qui marchent, j'ai comparé, mais rien n'y faisait. Mais je comprends (enfin, je crois comprendre, visiblement ce n'est pas encore du 100%...) comment ça marche assez bien.
En gros, vouloir aller très vite, c'est bien, mais c'est difficile. Vouloir allez trop vite, c'est risquer de prendre de mauvaises habitudes, de coder sans comprendre, de passer à côté des étapes les plus importantes : la conception et la structuration du code.
  • Je suis tout à fait d'accord, c'est pourquoi je me coltine des tonnes de tutos :)
C'est aussi mal adapté au format des forums : il y est plus efficace de poser une question précise sur un point clairement identifié. Tu auras plus de chance d'avoir une réponse, une réponse claire, formatrice, adapté à ce que l'on devinera de ton niveau.
  • J'en prends bonne note, comme j'ai dit plus haut, désormais j'essaierais de présenter ça de façon moins lourde.
Voilà.
Moi, ce que je peux faire c'est te conseiller un lien générique sur la question "passer d'un point fla à un point as". Toute la série sur les classes est bien.
  • Je vais voir ça dès que j'ai fini de te répondre.
Sinon, pour le tuto sur lequel tu te base, je le trouve pas terrible :
- pour expliquer à un débutant
- pour générer de bonnes pratiques
- en plus en anglais :-( …
  • Alors, pour être juste, il n'est pas facile pour un débutant de déterminer si un tuto est bon ou pas :). L'anglais ne me pose aucun problème, le fait est que quand je fais des recherches de tuto sur google, je tombe toujours sur des résultats en anglais, donc logiquement c'est ceux-là que je fais.
Tu as de très bons tutos en français sur le wiki de ce forum (notamment tous les exercices pratiques de cette page). Les avantages : c'est en français, l'auteur n'est jamais très loin, et les autres connaissent déjà un peu le contenu.
  • Oui, je les parcourais hier (je ne connaissais pas ce site avant, c'est une connaissance qui me l'a recommandé). Je vais me pencher sérieusement dessus.
Sinon, je te fais ma propre proposition de code, qui fait la même chose que celui que tu as trouvé, mais (à mon avis) en mieux, en français, et même plus
- Ce code déplace le personnage sur de vrais diagonales
- Ce code déplace le personnage avec une vrai vitesse équilibrée
- Ce code est plus malin, plus court et plus clair.
- Et en français…

:D Après, tu fais ton choix.
  • Ca c'est inespéré, je n'en demandait pas tant! J'imagine en effet que mon code est une usine à gaz...
Je te copie 2 fois le code : une fois brute pour te montrer qu'il est simple.
Puis une fois avec les commentaires assez détaillés (je fais ça parce que je sais que l'accumulation de commentaires dans du code peut être déroutant/effrayant quand on débute. C'est bien pour suivre pas à pas, mais ça rend difficile la vue d'ensemble.
  • C'est génial :) et comme je retape tout à chaque fois, au moins je devrais pouvoir assimiler. Ton code semble de toutes manières beaucoup plus simple que mon bricolage, donc ça devrait passer tranquille :)

Si tu as des questions sur ce code, n'hésite pas. Je suis assez présent ces jours-ci.

Voilà les sources.
  • Merci, c'est vraiment sympa, je vais... d'abord lire le lien que tu as donné au dessus, et après je vais tester ça.

    Merci encore!


#4 venom2506

    Ceinture Blanche

  • Members
  • Pip
  • 13 messages

Posté 09 April 2013 - 10:04 AM

Ca marche, c'est formidable! Merci beaucoup :)
Note pour les débutants dans mon genre qui sont intéressés par ce code (et dieu sait qu'il doit y en avoir un paquet), il faut remplacer Sprite par MovieClip, sinon le code ne pourra pas lire les frames de votre animation et vous aurez un message d'erreur.

juste un truc et après je ne t'embête plus; la ligne suivante:
personnage.orientation.gotoAndStop (1);
Normalement, cette ligne définit l'orientation du personnage à l'affichage, mais elle ne semble pas tenir compte de la frame indiquée, elle utilise forcément la première. Si je retire le .orientation, elle va bien à la bonne frame, mais lit l'animation (le personnage "marche sur place", malgré que ce soit un gotoAndStop). Il y a bien un stop(); sur chaque frame de l'animation, donc ce n'est pas ça. As-tu une idée de ce qui ne va pas? Ce n'est pas très gênant dans l'immédiat, mais la question se posera forcément plus tard, donc autant que je comprenne tout de suite où je me trompe.

#5 dldler

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 4163 messages

Posté 09 April 2013 - 10:20 AM

;-D

@ Note pour les débutants :
Si vous créez une classe de document (le Main.as), n'utilisez pas de frames dans votre document Flash, ni de code sur le scénario. Utilisez la classe Sprite. Sinon, vous risquez beaucoup de complications et vous ralentissez énormément votre projet (souvent dommage pour un jeu).

Si vous avez besoin de structurer plusieurs "décors" (étapes ?), placez les dans un MovieClip et déposez ce MovieClip sur la première (et seule) image de votre scénario. Nommez-le "decor" si ça correspond à votre usage, sinon un autre nom de votre choix.

Dans le code de votre classe document, vous pourrez manipuler ce clip en faisant :
decor.gotoAndStop("armement"); // … par exemple…

C'est mon humble avis de non-débutant



@ venom : étendre Sprite pour le Main.as, c'est vraiment une des bonnes pratiques à s'imposer. Elle conditionne une bonne structure du fichier Fla

#6 venom2506

    Ceinture Blanche

  • Members
  • Pip
  • 13 messages

Posté 09 April 2013 - 10:28 AM

Je suppose que c'est de là que vient mon problème d'au dessus (tu as dû le rater, j'ai édité après coup). Bon je vais essayer de piger comment ça marche sans que j'ai droit à un erreur 1180.

#7 dldler

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 4163 messages

Posté 09 April 2013 - 10:38 AM

Voir le messagevenom2506, le 09 April 2013 - 10:04 AM, dit :

juste un truc et après je ne t'embête plus; la ligne suivante:
personnage.orientation.gotoAndStop (1);

Tu rates une imbrication :
il y a personnage, avec 4 images.
Sur chaque image, il y a un clip nommé orientation
Et dans ce clip orientation, il y a l'animation du déplacement (la marche, pour un personnage).
Dans le tuto d'ou tu es parti, c'etait le clip w

Quand je fais :
personnage.orientation.gotoAndStop (1);
Je stoppe juste l'animation du déplacement de l'orientation actuelle du personnage.

Si tu veux changer l'orientation du personnage tu dois taper directement :
personnage.gotoAndStop(2);
[EDIT] Ça ne te dispense pas de stopper aussi l'animation

Pour rappel, l'association des orientations est :
1 : GAUCHE
2 : BAS
3 : HAUT
4 : DROITE

J'en profite ?
Du coup, une autre bonne pratique, c'est de déclarer des constantes pour les directions, plutôt que de retenir par cœur les orientations :


private const GAUCHE:int=1;
private const BAS:int=2;
private const HAUT:int=3;
private const DROITE:int=4;

// Et partout ou on veut orienter le personnage,
// on obtient quelque chose de plus lisible
personnage.gotoAndStop(BAS);


#8 dldler

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 4163 messages

Posté 09 April 2013 - 10:42 AM

Un petit hors propos de plus :

certains bouts de code ici seraient mieux placés dans une classe Personnage… Ça serait à mon avis un exercice plus intéressant que de faire un Main.as avec tout le code :)

#9 venom2506

    Ceinture Blanche

  • Members
  • Pip
  • 13 messages

Posté 09 April 2013 - 10:49 AM

Ok, j'ai compris pour l'orientation (cas typique de "je croyais avoir pigé mais en fait non"), et j'ai intégré les constantes, tu as raison, ça sera plus pratique plus tard. Sinon oui, je me suis dit assez vite qu'intégrer tout ça dans une classe à part serait mieux, mais je ne vais quand même pas t'enquiquiner avec tout ça et puis avant je voulais que ça marche. Bon j'arrive toujours pas à faire marcher le chmilblik quand j'utilise sprite au lieu de movieclip, mais je vais quand même essayer de trouver tout seul, je n'ai pas envie de gonfler mon monde plus que nécessaire. Je reviendrais pleurnicher ici plus tard si je n'y arrive toujours pas :P

edit: bah j'ai trouvé, fallait que je vire le stop(); sur la première frame de la timeline principale dans le fichier fla. Bon, je vais essayer de bouger le code du perso dans une classe séparée de la classe main.

#10 dldler

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 4163 messages

Posté 09 April 2013 - 10:56 AM

Un peu d'aide sur la méthodo quand même ?
- Sélectionne toutes les images (attention a bien finir chaque calque par des images, au besoin, utilise des images clés vides à la fin des interpolations)
- clic droit, copier les images
- nouveau symbole dans la bibliothèque, double clic pour éditer son scénario
- sélectionner la première image du scénario, clic droit, coller les images

- retour sur le scénario principal : tout supprimer, ne garder qu'une seule image vide
- déposer une occurrence du symbole de bibliothèque que tu viens de créer

#11 venom2506

    Ceinture Blanche

  • Members
  • Pip
  • 13 messages

Posté 09 April 2013 - 11:01 AM

J'avais déjà tout dans un clip en fait (c'est comme ça qu'on m'a appris, ne rien mettre sur la timeline principale, tout faire dans des clips), là il n'est même pas sur le stage et ça marche quand même.
Faut que j'arrête d'éditer mes messages précédents.

#12 dldler

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 4163 messages

Posté 09 April 2013 - 11:06 AM

Voir le messagevenom2506, le 09 April 2013 - 10:49 AM, dit :

edit: bah j'ai trouvé, fallait que je vire le stop(); sur la première frame de la timeline principale dans le fichier fla.

!
J'espère que tu as bien fait le lien après coup avec le message d'erreur. Il est spécifique aux bouts de codes qui traînent dans des Sprite. Une prochaine fois, tu tilteras plus vite :)

#13 venom2506

    Ceinture Blanche

  • Members
  • Pip
  • 13 messages

Posté 09 April 2013 - 11:17 AM

Oui, comme dirait l'autre, c'est en forgeant qu'on devient forgeron (ou c'est en sciant que Léonard de vinci).
Bon allez, je m'attaque au transfert de code vers une classe perso dédiée (dois-je l'étendre aussi en Sprite?).

Merci encore pour ton aide!

annecdote: comme j'en aurais besoin plus tard (et que mon mc est trop grand par défaut), j'ai essayé de rétrécir mon perso en utilisant scaleX/scaleY, ça fait aller le perso plus loin que là où j'ai cliqué (genre si je mets 0.3, il parcourt 3 fois la distance qu'il était censé parcourir). Mais... tant pis. Je verrais ça un autre jour.

#14 dldler

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 4163 messages

Posté 09 April 2013 - 13:07 PM

Il ne faut jamais remettre à demain… ;-)

Tu as 2 solutions : une bonne et une moins bonne.

La moins bonne : multiplier la distance du vecteur vitesse par l'échelle du clip personnage. Mais ce n'est pas top car tu vas avoir a faire ça partout et tout le temps.

La bonne : remettre l'échelle du personnage à 1 et modifier l'échelle des animations de chaque face (le fameux clip orientation) vu que ce clip là, tu ne le déplaces pas. C'est la solution que je te conseille.

#15 venom2506

    Ceinture Blanche

  • Members
  • Pip
  • 13 messages

Posté 09 April 2013 - 13:35 PM

Oui. Je suppose que si je veux le perso plus gros dans certaines scènes, il vaut mieux que j'en crée juste un autre.

#16 dldler

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 4163 messages

Posté 09 April 2013 - 13:40 PM

Pas forcément.
Tu utilises un conteneur avec une échelle plus grande…
(oui, je sais, c'est toute une gymnastique à mettre en place)

#17 venom2506

    Ceinture Blanche

  • Members
  • Pip
  • 13 messages

Posté 09 April 2013 - 14:36 PM

De toute manière, tant que je n'aurais pas réussi à créer cette classe personnage, je ne vais pas me pencher sur un autre problème ;) Ce genre de considérations viendra en tout dernier, dans tous les cas. C'est de l'esthétique qui ne sert pas à grand chose, je préfère que le reste marche, pour l'heure.

#18 venom2506

    Ceinture Blanche

  • Members
  • Pip
  • 13 messages

Posté 25 April 2013 - 15:56 PM

Bon... après tout ce temps, je n'ai toujours pas réussi à déplacer les contrôles dans la classe personnage >_<

#19 Nataly

    Community Jane

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 5783 messages

Posté 25 April 2013 - 16:12 PM

slt :)

Je ne sais pas comment tu veux t'y prendre mais j'imagine que tu veux tout bonnement un perso qui puisse marcher de là où il est à un point qu'on lui donne, genre :



var perso:Mv_Perso= new Mv_Perso()
perso.rejoint(mouseX, mouseY)
 


cette méthode rejoint ressemble fichtrement à la fonction deplacement que te proposait Dldler non ? si ce n'est qu'au lieu de calculer les coordonnées depuis le personnage, on les lui passe…


;)
Le savoir est le seul bien qui s'accroit quand on le partage
une tartine de tutos

#20 venom2506

    Ceinture Blanche

  • Members
  • Pip
  • 13 messages

Posté 25 April 2013 - 16:20 PM

En fait, son système marche très bien, pas de soucis, le problème, c'est qu'il m'a suggéré de déplacer tout ce qui n'est pas nécessaire dans mon fichier main afin de le simplifier et de le mettre directement dans le fichier personnage. Evidemment, il a raison, le problème, c'est que je n'y arrive pas du tout >_>. Comme je suis têtu et que je refuse de laisser tomber, je m'entête, mais là je commence à désespérer un peu, et si je n'arrive pas à faire juste ça, c'est mal barré pour la suite...

#21 Nataly

    Community Jane

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 5783 messages

Posté 25 April 2013 - 16:30 PM

@ --> Dldler

du coup je regarde ton code trop malin, avec mention spéciale à la subtilité du point 4
**il faut que je me souvienne de ce fichu principe, il faut que je me souvienne de ce fichu principe, il faut que je me souvienne de ce fichu principe**



Je me demande juste un truc, parti pris de dev :

Voir le messagedldler, le 09 April 2013 - 08:53 AM, dit :


// Un timer servira à toutes les animations, donc on le lance
// NB : on ne l'arrêtera que si l'on veut mettre le jeu en pause par exemple


  private function mouvement (event:TimerEvent):void {
        // on decompte le nombre d'étapes restant. S'il n'y a plus d'étapes,
        // on arrête d'écouter le timer et on arrête le personnage.

 []
  }
}


Pourquoi plutôt un Timer qui tourne tout le temps (dans ma tête ça "fait du travail" :P) auquel on branche et débranche un écouteur plutôt que start et stop ?
Est-ce que je penserais à l'envers ? (qui moi ? O.O) c'est plus gourmand d'écouter que d'émettre ?
Le savoir est le seul bien qui s'accroit quand on le partage
une tartine de tutos

#22 Monsieur Spi

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 6996 messages

Posté 25 April 2013 - 16:42 PM

Citation

déplacer tout ce qui n'est pas nécessaire dans mon fichier main afin de le simplifier et de le mettre directement dans le fichier personnage.

Tu peux aussi créer une classe à part qui gère les contrôles, plutôt que de mettre les contrôle dans la classe du personnage. Ce sera une classe réutilisable pour un autre jeu avec un personnage différent, ça évitera d'alourdir la classe de ton personnage, enfin si jamais tu veux créer plusieurs personnages sur le même moule (ennemis et joueur par exemple), chaque personnage peut se déplacer (c'est dans sa classe) mais leurs contrôles sont différents (une classe contrôles pour le joueur et une différente pour les ennemis), il te reste juste à importer la classe qui le fait bien selon le type personnage à créer. Enfin c'est juste un parti pris, tu peux tout à fait mettre les contrôles du personnage dans sa classe, ça dépend des besoins.

#23 dldler

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 4163 messages

Posté 25 April 2013 - 20:51 PM

Voir le messageNataly, le 25 April 2013 - 16:30 PM, dit :

Pourquoi plutôt un Timer qui tourne tout le temps (dans ma tête ça "fait du travail" :P) auquel on branche et débranche un écouteur plutôt que start et stop ?
Est-ce que je penserais à l'envers ? (qui moi ? O.O) c'est plus gourmand d'écouter que d'émettre ?

C'est un parti pris. Oui. Bien sûr, d'autres constructions sont possibles.

Pour moi, un timer principal, c'est le rythme des animations. C'est le métronome d'une partition, qui tic-tac même pendant les silences de l'orchestre.

Un personnage écoute le timer quand il veut se déplacer : il subit le rythme de l'animation.
Quand le personnage passe en repos, il arrête d'écouter le timer.
Parce que s'il arrête le timer lui-même, il va arrêter toutes les autres animations qui sont branchées sur ce timer. Animations qu'il ne connaît pas et sur lesquelles il ne devrait pas avoir e pouvoir…

Et si dans un orchestre, le triangle arrêtais le rythme du chef d'orchestre à chaque fois que lui n'a rien a faire, ça donnerais quoi ? :-)

#24 Monsieur Spi

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 6996 messages

Posté 25 April 2013 - 21:25 PM

Yop,

Bon je suis obligé de réagir lol.

Je suis en train de monter un exercice sur le jeu Auditorium, et justement j'aborde cette problèmatique avec une parabole sur l'orchestre, j'apprécierai vos retours là dessus d'ailleurs. Je suis en soirée ce soir, demain j'essayes de poster l'exercice, si ça vous dit on relance le débat à ce niveau dès que j'ai posté mon truc. Le principe est de modifier le comportement d'un flux de particules (didier va aimer ça) et je prend justement comme exemple l'image de l'orchestre lol. J'ai fini de rédiger le tuto je le poste demain, Venom je pense que cela te donnera pas mal de piste ;-)

#25 venom2506

    Ceinture Blanche

  • Members
  • Pip
  • 13 messages

Posté 25 April 2013 - 21:31 PM

Voir le messageMonsieur Spi, le 25 April 2013 - 16:42 PM, dit :

Tu peux aussi créer une classe à part qui gère les contrôles, plutôt que de mettre les contrôle dans la classe du personnage. Ce sera une classe réutilisable pour un autre jeu avec un personnage différent, ça évitera d'alourdir la classe de ton personnage, enfin si jamais tu veux créer plusieurs personnages sur le même moule (ennemis et joueur par exemple), chaque personnage peut se déplacer (c'est dans sa classe) mais leurs contrôles sont différents (une classe contrôles pour le joueur et une différente pour les ennemis), il te reste juste à importer la classe qui le fait bien selon le type personnage à créer. Enfin c'est juste un parti pris, tu peux tout à fait mettre les contrôles du personnage dans sa classe, ça dépend des besoins.

Ma foi, je ne vois pas aussi loin, déjà, si j'arrive à quoi que ce soit avec ce projet, ça sera déjà formidable ;) (surtout que je bosse sur deux en même temps, celui sur lequel je poste qui est juste pour apprendre, et un autre truc un peu plus sérieux, mais où je suis coincé aussi) Sinon j'ai suivi tes tutos, ils sont super, il va falloir que j'essaie d'adapter le changement de niveau du tuto plateforme, mais ça on verra plus tard :)

#26 Nataly

    Community Jane

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 5783 messages

Posté 26 April 2013 - 09:30 AM

OK si on divers écouteurs sur le mêm Timer, bien sûr :D

Vu que là, comme très souvent, il n'y en a qu'un, je repose la question : qu'est-ce qui est le plus gourmand selon vous diffuser ou écouter ?

;)
Le savoir est le seul bien qui s'accroit quand on le partage
une tartine de tutos



1 utilisateur(s) li(sen)t ce sujet

0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)

authorised training centre

Centre de Formation Mediabox - Adobe et Apple Authorised Training Center.

Déclaré auprès de la Direction du Travail et de la Formation Professionnelle

Mediabox : SARL au capital de 62.000€ - Numéro d'activité : 11 75 44555 75 - SIRET : 49371646800035

MEDIABOX, 23, rue de Bruxelles, 75009 PARIS

FFP