Forums Développement Multimédia

Aller au contenu

Gestion de la profondeur en 2D isométrique

CODE

7 réponses à ce sujet

#1 Ezkiel

    Ceinture Blanche

  • Members
  • Pip
  • 9 messages

Posté 27 November 2011 - 14:46 PM

Bonjour à tous !
J'ai cherché et je n'ai pas trouvé, j'espère que le sujet n'a pas déjà était traité et si le cas, désolé par avance.

Donc voilà j'ai beau me creuser la tête, et je n'arrive pas à trouver une solution efficace et performante pour gérer les profondeurs, c'est à dire, lorsque un personnage se déplace :

  • Si il se trouve sur une case devant une case possédant un objet (exemple un arbre), il doit apparaitre devant cet arbre.
  • Si il se trouve derrière cette même case, il doit cette fois ci apparaitre derrière.

Dans l'exemple suivant :
Image IPB

Le personnage (le carré noir) apparait derrière la table.

J'ai imaginé 2 solutions pour résoudre ce problème :

  • La première entre chaque ligne, laisser un clip vide dans lequel le personnage sera positionné des lors qu’il est sur la ligne associé à ce calque (pour que ce soit plus simple, voir le screen suivant):

    Image IPB

    Je n'ai pas retenu cette idée, le jeu se destine probablement a être multi-joueurs, et donc il faudrait un nombre de clip vide équivalent au nombre de joueur, etc... trop compliqué à gérer.

  • La deuxième solution est de tous simplement déplacer le (ou les) personnages dans la case concerné (chaque case est un objet/clip unique), pas de problème pour gérer le multi-joueurs, mais là sa devient quasiment impossible d'avoir un déplacement fluide.

Je précise, le jeu est développé en objet et le personnage se déplace au clic grâce à un algorithme de pathfiding a*.

Je cherche donc une meilleurs solution pour gérer cette histoire de profondeur, avec comme objectif principal un déplacement fluide et une futur compatibilité avec le multi-player.

Merci d'avance pour votre aide :) et j'espère avoir était clair, si ce n'est pas le cas, je répondrais à toutes vos questions.

#2 Angelstreet

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 214 messages

Posté 27 November 2011 - 15:34 PM

Slt recherche du coté de TonyPaou Filmation. J'ai fait mon propre engine open source IsoEngineet télécharger les sources ici. Aussi tu devrait jeter un oeil a FlashGameMaker ici. Les sources sont aussi hébergée sur le googleCode.

Modifié par angelstreet, 27 November 2011 - 15:35 PM.


#3 Ezkiel

    Ceinture Blanche

  • Members
  • Pip
  • 9 messages

Posté 27 November 2011 - 16:11 PM

Je suis en train de regarder tous ça, j'ai l'impression que tu as un peu le même souci avec isoEngine non ? :

Image IPB
(j'ai peu être pas su me servir de ton moteur)

Je vais m'attarder à regarde ça en détails, mais à vrai dire ^^ il me faudrait du moins détaillé, simplement le principe, les fonctions à utiliser, etc...
Enfin c'est pas grave si personne ne peut m'aider, ce que tu m'as filé va pouvoir m'aider je pense. Je suis pas bien à l'aise avec l'anglais ^^ mais ça devrait le faire !

Merci à toi ;)

#4 St4n

    Ceinture Bleue

  • Members
  • PipPipPipPipPip
  • 98 messages

Posté 27 November 2011 - 16:42 PM

Bonjour,

Si tu joues avec les depths, en swapant le perso en fonction de sa position, ça devrait le faire.

Exemple de grille
Image IPB



Tu fais passer le perso à depth de sa case +1

Du coup, s'il est sur 41, il est en 42 (donc au dessus de 41, 33, 25, 35 et au dessous de 45/47/49)

#5 Ezkiel

    Ceinture Blanche

  • Members
  • Pip
  • 9 messages

Posté 27 November 2011 - 17:18 PM

Je faisait un peu comme cela au début, mais si il venait à y avoir [1,n] personnages sur la map, ça deviendrais très difficilement gérable non ?

#6 Logic

  • Honoris
  • PipPipPipPipPipPipPipPip
  • 2733 messages

Posté 27 November 2011 - 21:37 PM

http://flash.mediabo...lcul-isometric/

#7 St4n

    Ceinture Bleue

  • Members
  • PipPipPipPipPip
  • 98 messages

Posté 27 November 2011 - 23:39 PM

Et bien si tu peux avoir plusieurs personnages sur la même case, c'est un problème qui peut se poser.

Si tu penses avoir jusqu'à 50 persos sur la même case,

La profondeur de la case n est de : 50*(n-1)+1

#8 Ezkiel

    Ceinture Blanche

  • Members
  • Pip
  • 9 messages

Posté 30 November 2011 - 21:31 PM

Désolé de ne pas être venu répondre plus tôt, je n'ai pas eu le temps, bref ! Merci pour vos réponses !

Avec ce système tous marche à merveille, j'ai repris ta solution Pastilas mais en l'optimisant un peu (enfin je pense).
J'ai disons repris ma première solution, créer un calque vide en fin de chaque ligne dont je stocke la profondeur dans un tableau (par exemple sur une map de 4 x 4 cases, il y à 7 ligne horizontale, j'ai donc un tableau de 7 cases avec la profondeur du calque vide pour chaque ligne) et donc au passage sur une case, il me suffit de savoir sur quel ligne je suis, et de récupérer la profondeur dans le tableau.

Du coup si il venait à y avoir 50 joueurs, ça me ferait (largeur + hauteur - 1) * 50 calques vides à créer et non (largeur * hauteur * 50). Je pense que ça doit jouer sur les performances non ?

Maintenant j'ai un autre problème, depuis Flash CS5.5 j'ai mis au point une petite animation contenant tous les plans de mon personnage avec un peu de code AS3 (par exemple en frame1 on trouve mon personnage orienté vers le bas/droite et le code suivant : stop();)

Bref quand j'utilise un Loader pour l'importer en MovieClip dans FlashDevelop, la première frame s'affiche bien, mais impossible d'accéder aux autres (via un gotoAndPlay). J'ai l'erreur suivante :

*** Violation de la sécurité Sandbox***
SecurityDomain 'file:///C|/Users/Moi/Documents/Flash/iso2D/iso2d/graphique/objPlayer/player.swf' a tenté d'accéder au contexte incompatible 'file:///C|/Users/Moi/Documents/Flash/iso2D/iso2d/bin/iso2d.swf'


A ce que j'ai lu c'est fréquent et ça dépend d'un groupe de travail (ou quelque chose du genre), mais je n'ai pas su trouver de vrai solution pour corriger cela, si jamais l'un de vous peut m'aider, je suis preneur.



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

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