AccueilAccueil  FAQFAQ  RechercherRechercher  S'enregistrerS'enregistrer  MembresMembres  Connexion  

Partagez | 
 

 Ciblage dans différentes zones

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
Caly
Utilisateur confirmé: Rang ****
avatar

Messages : 1279
Localisation : Haute Normandie
Projet Actuel : Capturer, apprivoiser et dresser des Pokémons sauvages pour faire des spectacles de rue et en faire mon métier.

MessageSujet: Ciblage dans différentes zones   Mar 17 Fév 2015 - 18:47

Bonsoir, je penche sur un truc qui me pose quelques soucis (non pas de codage mais plutôt de manière de procéder).

Voici un schéma :


Les bords représentent une "room", cette room est séparée par des murs (traits noirs) en plusieurs pièces (les différentes couleurs).
Ma Caméra et mon Player ce trouve dans une des zones, et j'aimerais lister toutes les instances présentes dans cette pièce et désactiver les autres.

Alors j'ai deux idées en tête :

- La première est de vérifier s'il y a un mur avec une "collision line" entre l’instance et le Player, le problème c'est que les coins peuvent contre-mettre les choses.

- La seconde est de vérifier dans un tableaux chaque case avec un algo qui va séparer les pièces en fonction des cases murées, mais j'ai peur que ça prennent pas mal de temps à l'ouverture de la room.

Auriez vous une autre idée de comment procéder?
Revenir en haut Aller en bas
D-z
Utilisateur confirmé: Rang *****
avatar

Messages : 1608
Localisation : Montpellier

MessageSujet: Re: Ciblage dans différentes zones   Mar 17 Fév 2015 - 18:52

Pourquoi pas stocker pour chaque zone la liste des rectangles qui la composent ?

_________________
 
Home is not a place, it's a feeling.
Revenir en haut Aller en bas
Caly
Utilisateur confirmé: Rang ****
avatar

Messages : 1279
Localisation : Haute Normandie
Projet Actuel : Capturer, apprivoiser et dresser des Pokémons sauvages pour faire des spectacles de rue et en faire mon métier.

MessageSujet: Re: Ciblage dans différentes zones   Mar 17 Fév 2015 - 18:58

Oui mais tu les calcules comment? Smile avec des collision line?
Revenir en haut Aller en bas
D-z
Utilisateur confirmé: Rang *****
avatar

Messages : 1608
Localisation : Montpellier

MessageSujet: Re: Ciblage dans différentes zones   Mar 17 Fév 2015 - 19:36

Je suppose que le plus simple est de les faire à la main... Après c'est pas mon domaine, mais doit y avoir des algos capables de découper efficacement des formes chelous en paquets de rectangles :p

_________________
 
Home is not a place, it's a feeling.
Revenir en haut Aller en bas
Caly
Utilisateur confirmé: Rang ****
avatar

Messages : 1279
Localisation : Haute Normandie
Projet Actuel : Capturer, apprivoiser et dresser des Pokémons sauvages pour faire des spectacles de rue et en faire mon métier.

MessageSujet: Re: Ciblage dans différentes zones   Mar 17 Fév 2015 - 20:04

Ajouter une fonction de cadrage de pièce dans le map-editor alors. Mais doit bien avoir un algo quant même je pense.
Revenir en haut Aller en bas
onilink_
Modérateur
avatar

Messages : 8902
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

MessageSujet: Re: Ciblage dans différentes zones   Mar 17 Fév 2015 - 20:15

Les murs sont forcément horizontaux/verticaux?
Si oui l'algo de partitionnement doit pas être compliqué.
J'en vois un vite fait, mais pas sur qu'il marche dans tous les cas, c'est juste un truc qui me passe par la tete:

1) Pour chaque mur, tu regardes les sommets de la forme qui peuvent être projetés dessus, et tu crées de nouveau 'sommets'

2) Tu relies les sommets a leurs sommets voisins

3) Tu extrais les rectangles



Une fois que t'as réussi a extraire tous les rectangles d'une salle, tu sais très facilement les instances qu'elle contiens.

Dans tous les cas, l'algo peut être fait de manière très simple si la map est représentable sur une grille.
J'avais déjà fait un topic sur la simplification en "moindres rectangles" d'une matrice, si ça t’intéresse.


_________________
                 
Revenir en haut Aller en bas
Caly
Utilisateur confirmé: Rang ****
avatar

Messages : 1279
Localisation : Haute Normandie
Projet Actuel : Capturer, apprivoiser et dresser des Pokémons sauvages pour faire des spectacles de rue et en faire mon métier.

MessageSujet: Re: Ciblage dans différentes zones   Mar 17 Fév 2015 - 20:53

Merci Oni pour le procédé, alors en voyant ton schéma j'ai pensé a procéder comme ça:



Je prend tout les murs du bord et relie de lignes, ensuite je parse les jointures des lignes, mais ensuite comment déterminer qu'elle rectangle appartient à quelle pièce?

Et sur des murs en diagonal ça ne marche plus?
Revenir en haut Aller en bas
onilink_
Modérateur
avatar

Messages : 8902
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

MessageSujet: Re: Ciblage dans différentes zones   Mar 17 Fév 2015 - 21:14

Ben la dans l'idée il s'agissait de créer une liste de bounding box qui permettent de recréer la pièce.
Ainsi il était simple ensuite de savoir quelles instances sont dans la pièce en faisant de bête tests de collisions (rectangle).

Le soucis s'il y a des diagonales c'est qu'il ne s'agit plus de faire une décomposition en rectangles, mais une décomposition en polygones convexes, pour faire des tests de collisions avec des polygones convexes.
Alors déjà, c'est vraiment beaucoup plus compliqué, et ensuite, GM n'a pas de fonction pour savoir si une instance est dans un polygone convexe (enfin je ne crois pas, même si box2d le permettrait).


Dooonc, la seule solution viable que je vois, sans trop se prendre la tête, est de se débrouiller a retranscrire la pièce dans une matrice, et ensuite recréer les boudings box a partir de cette fameuse matrice (ce qui est très simple, et y a plusieurs façons de faire, mais pas forcément toutes efficaces).

Bref la partie compliquée de l'algo deviens de représenter une sale dans une grille. Déjà faut choisir une bonne taille de grille (normalement il suffit de prendre la taille du plus petit mur), et ensuite, recréer le 'contenu' de la pièce. Pour ça je ne vois qu'une façon de procéder, et il faut mettre un objet spécial qui indique l’intérieur de la pièce (ici le rond vert) et faut aussi que la pièce soit fermée d'une façon ou d'une autre (a la limite tu crée un objet mur séparateur que tu détruits ensuite, après les calculs, si les pièces ne sont pas fermées de base).

L'algo est en trois étapes:


Ensuite, pour obtenir les bounding box (pour optimiser les calculs de collision avec les instances) tu fusionne juste les cellules horizontales, puis verticales si c'est possible.

_________________
                 
Revenir en haut Aller en bas
onilink_
Modérateur
avatar

Messages : 8902
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

MessageSujet: Re: Ciblage dans différentes zones   Mar 17 Fév 2015 - 21:17

Solution probable dans ce post:


Ensuite, si tes instances "exterieures" a la pièce sont fixes, tu peux partir sur le même principe.
Pour chaque instance de la room, tu lances un rayon du rond vert (centre de chaque pièce) a celle ci en testant les collisions avec les murs.

S'il y a collision avec un mur, l'instance est en dehors de la pièce, s'il n'y a pas collision, elle est dedans.

Cette façon est la plus simple et efficace je pense.
Et ça te permet de donner a chaque instance de l'objet "RoomInterior" une liste d'instances qui la composent par exemple.

_________________
                 
Revenir en haut Aller en bas
Caly
Utilisateur confirmé: Rang ****
avatar

Messages : 1279
Localisation : Haute Normandie
Projet Actuel : Capturer, apprivoiser et dresser des Pokémons sauvages pour faire des spectacles de rue et en faire mon métier.

MessageSujet: Re: Ciblage dans différentes zones   Jeu 19 Fév 2015 - 11:07

Merci beaucoup Oni ça m'a permis de voir beaucoup plus clair.

Voilà j'ai bidouillé un truc qui m'a pas l'air trop mal.

http://host-a.net/u/Caly/SeparatorParts2.gmk

J'arrive à créer un Sprite qui me sert de masque pour la pièce que je cible.
Niveau optimisation je pense pas pouvoir faire beaucoup mieux avec GM :s

Tu peut jeter un coup d’œil Oni stp, et dire ce que tu en pense du procédé et surtout de l'optimisation?
Revenir en haut Aller en bas
onilink_
Modérateur
avatar

Messages : 8902
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

MessageSujet: Re: Ciblage dans différentes zones   Jeu 19 Fév 2015 - 11:53

Ça me parait correct, en tout cas ça a l'air de bien marcher et niveau perfs ça tourne bien.
J'espère juste que le côté récursif fera pas de dégâts sur de grosses room Razz

Jpense qu'y a moyen de faire mieux en explorant l'idée que j'ai posté en dernier, car ça nécessite pas la creation de masques, mais faudrait trouver une solution pour résoudre le soucis des sales non convexes... et la forcément ça risque de demander de la récursivité...
Je ferais quelques tests si j'ai le temps, j'ai quelques idées :p

_________________
                 
Revenir en haut Aller en bas
onilink_
Modérateur
avatar

Messages : 8902
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

MessageSujet: Re: Ciblage dans différentes zones   Jeu 19 Fév 2015 - 12:42

J'ai fait un petit test rapide de mon coté, ça nécessite de placer quelques objets manuellement mais ça marche au poil:
http://host-a.net/u/onilink_/partitionnement_rooms.gmk

Et l’implémentation est vraiment très simple.
Faudrait juste utiliser une pile plutôt qu'une liste pour les nodes, car sous GM les listes ne sont pas de vrai listes...

_________________
                 
Revenir en haut Aller en bas
Caly
Utilisateur confirmé: Rang ****
avatar

Messages : 1279
Localisation : Haute Normandie
Projet Actuel : Capturer, apprivoiser et dresser des Pokémons sauvages pour faire des spectacles de rue et en faire mon métier.

MessageSujet: Re: Ciblage dans différentes zones   Jeu 19 Fév 2015 - 13:36

Yep cool Smile
J'avais pensé à ça aussi j'avais même commencé à faire un petit test.

Plus qu'à créer une alerte dans le mapEditor qui signale qu'un Actor est sans Controlor et donc nécessite l'ajout d'un Node.

Et un Stack ou Queue pour gérer la liste des Actors.

Merci pour la piste à suivre.

La création d'un masque est vraiment coûteuse sur GM?
Je vais faire des tests de perf' sur ma version car elle nécessite moins de boulot niveau Editage de map, si ça va pas je part sur la tienne qui est moins gourmande en ressources mais moins maniable.

Merci Smile
Revenir en haut Aller en bas
onilink_
Modérateur
avatar

Messages : 8902
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

MessageSujet: Re: Ciblage dans différentes zones   Jeu 19 Fév 2015 - 13:58

Pour les masques je sais pas trop comment ils ont codé ça donc niveau perfs je pourrais pas te dire.
La seule chose qui est sure c'est que ça prend pas mal de mémoire. Mais bon ça dépend de la taille du masque quoi...

Faut tester sur de grosses rooms après. Pis dans ton cas tu peux aussi faire un système de résolution de masques (genre taille divisée par deux, puis ensuite tests de collision avec scale x2).

_________________
                 
Revenir en haut Aller en bas
Caly
Utilisateur confirmé: Rang ****
avatar

Messages : 1279
Localisation : Haute Normandie
Projet Actuel : Capturer, apprivoiser et dresser des Pokémons sauvages pour faire des spectacles de rue et en faire mon métier.

MessageSujet: Re: Ciblage dans différentes zones   Jeu 19 Fév 2015 - 14:30

Citation :
Pis dans ton cas tu peux aussi faire un système de résolution de masques (genre taille divisée par deux, puis ensuite tests de collision avec scale x2).

Héé génial ça javais pas pensé, 1 node= 1px ensuite je multiplie par le node_width/height réel, ce qui fait que je peut gérer tout les objets de la pièce avec une mémoire vidéo réduite Smile

Je teste ce soir sur un grosse map pour voir le rendu en MS.
Revenir en haut Aller en bas
Contenu sponsorisé




MessageSujet: Re: Ciblage dans différentes zones   

Revenir en haut Aller en bas
 
Ciblage dans différentes zones
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Présentation des causes culturelles du rejet des personnes différentes
» Les différentes textures des fap et des lipstick mac ?
» Les différentes formes de la monnaie
» Question sur les différentes tenues.
» Différentes panures

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Forum Le CBNA :: Développement :: Entraide confirmés-
Sauter vers: