AccueilAccueil  FAQFAQ  RechercherRechercher  S'enregistrerS'enregistrer  MembresMembres  Connexion  

Partagez | 
 

 AI déplacement ( distance_to_point(), mp_potential_step())

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
Lemente
Petit bavard
avatar

Messages : 58

MessageSujet: AI déplacement ( distance_to_point(), mp_potential_step())   Lun 2 Mar 2015 - 19:59

Bonjour, j'ai crée un "jeu" où le joueur déplace un personnage et des "pnj" le suivent ou le fuient (en fonction de la valeur d'une variable).

Quelques images ici: http://imgur.com/a/ILR1m


J'ai fait ça d'une façon très simple, un peu trop même, c'est vraiment du straightforward. ( j'utilise distance_to_point() )

Sauf que j'aimerais ajouter des collisions entre les pnj, faire en sorte qu'ils s'évitent, etc ...

Pour le moment, chaque PNJ bouge en fonction de la différence entre sa variable et celle du joueur, ainsi que la position de ce dernier. Du coup ils se passent tous par dessus, et c'est très géométrique comme déplacement (en témoigne certains screens, qu sont intéressants mais ne correspondent pas à mon projet)

Je pense que la meilleur façon de rendre le tout plus "intéressant" et aléatoire, c'est d'utiliser la fonction mp_potential_step().
Sauf que je ne trouve pas comment l'utiliser directement dans mon objet PNJ. (peut être avec des calculs un peu compliqués qui détectent la position voulu, mais je suis pas super bon à ça ...).

Ou peut être que je peux recréer le comportement de mp_potential_step() que j'inclut dans ma version actuelle (avec distance_to_point() ).

Je ne sais pas si je suis très clair, si vous avec des idées, des liens, etc ... je suis très intéressé,
Merci !
Revenir en haut Aller en bas
onilink_
Modérateur
avatar

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

MessageSujet: Re: AI déplacement ( distance_to_point(), mp_potential_step())   Lun 2 Mar 2015 - 20:11

Ça sent l'algo de complexité n² ton truc Razz
Ça risque d'être chaud sous GM, surtout si tout le monde bouge en même temps, ça va vite devenir instable.

Tu peux regarder les algo de boids, ça correspond pas mal a ce que tu cherches je pense.

_________________
                 
Revenir en haut Aller en bas
Lemente
Petit bavard
avatar

Messages : 58

MessageSujet: Re: AI déplacement ( distance_to_point(), mp_potential_step())   Lun 2 Mar 2015 - 20:28

onilink_ a écrit:
Ça sent l'algo de complexité n² ton truc Razz
Ça risque d'être chaud sous GM, surtout si tout le monde bouge en même temps, ça va vite devenir instable.

Tu peux regarder les algo de boids, ça correspond pas mal a ce que tu cherches je pense.
Ah, j'ai oublié de préciser que je suis pas mathématicien, et que j'ai déjà eu du mal à faire le résultat actuel ^^

J'avais une autre idée: créer pour chaque PNJ un empty. L'empty aurait le comportement des PNJ actuels. Les nouveaux PNJ utiliseraient un simple mp_potential_step() pour essayer de rejoindre leur empty.

Le souci que j'ai, c'est de créer cet empty ...

Cela semble être une idée plus viable?

(j'ai déjà un peu joué avec mp_potential_step(), il y a moyen d'avoir pas mal d'instances qui l'utilisent en même temps, et ça reste fluide)

Edit: du coup, comment faire pour que chaque instance de oPNJ crée un empty en début de partie et le suive? (le créer c'est bon, mais comment faire pour les "lier"?)
merci !
Revenir en haut Aller en bas
onilink_
Modérateur
avatar

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

MessageSujet: Re: AI déplacement ( distance_to_point(), mp_potential_step())   Lun 2 Mar 2015 - 21:57

Je vois pas trop ce que tu veux dire par empty en fait.

_________________
                 
Revenir en haut Aller en bas
Lemente
Petit bavard
avatar

Messages : 58

MessageSujet: Re: AI déplacement ( distance_to_point(), mp_potential_step())   Lun 2 Mar 2015 - 22:48

onilink_ a écrit:
Je vois pas trop ce que tu veux dire par empty en fait.
Un objet sans sprite en faite (mais peut être qu'un autre terme est utilisé dans GM).

Un objet technique?
Revenir en haut Aller en bas
onilink_
Modérateur
avatar

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

MessageSujet: Re: AI déplacement ( distance_to_point(), mp_potential_step())   Lun 2 Mar 2015 - 23:02

Mais ça te servirais a quoi? Sinon oui logiquement c'est le bon mot, dans blender ça s'appelle pareil.

_________________
                 
Revenir en haut Aller en bas
Lemente
Petit bavard
avatar

Messages : 58

MessageSujet: Re: AI déplacement ( distance_to_point(), mp_potential_step())   Lun 2 Mar 2015 - 23:12

onilink_ a écrit:
Mais ça te servirais a quoi? Sinon oui logiquement c'est le bon mot, dans blender ça s'appelle pareil.
Exacte, c'est de Blender que ça me vient.

Eh bien au lieu d'avoir à faire des calculs compliqués pour connaître la position que veut atteindre le PNJ (pour pouvoir utiliser les valeurs obtenu avec la fct mp_potential_step() ) , j'ai juste à dire à l'empty d'y aller (sans se soucier des obstacles).
Ensuite j'utilise la position de l'empty dans la fct
Code:
mp_potential_step( empty.x, empty.y, false);
(se trouvant dans le step event du PNJ)
Revenir en haut Aller en bas
red-error
Utilisateur confirmé: Rang ****
avatar

Messages : 1015
Projet Actuel :

MessageSujet: Re: AI déplacement ( distance_to_point(), mp_potential_step())   Mer 4 Mar 2015 - 10:55

Lemente a écrit:
Sauf que j'aimerais ajouter des collisions entre les pnj, faire en sorte qu'ils s'évitent, etc ...
Pour cette partie ce que tu peux faire pour simplifier c'est que les pnj se repoussent lorsqu'ils entrent en collisions.

Pseudocode :
rayon = 16
with(tous les perso){ (ou bien juste en cas de collision si le mask est assez grand)
Si pas le même perso,
Si distance entre origine du perso 1 et origine du perso 2 < rayon {
direction = point_direction(x1,y1, x2,y2)
x1=x2- lengthdir_x(rayon,direction)
y1=y2- lengthdir_y(rayon,direction)
}}
Bon si on checke pour tous les persos pour tous les persos c'est en n² oui...
Ils se colleront les uns-aux autres comme des billes si ils vont dans la même direction, donc pas certain que ce soit la vision que tu cherches.

Alternative :
distance = point_distance(x1,y1, x2,y2)
x1+=- lengthdir_x(min(rayon-distance, 1) ,direction)
y1+=- lengthdir_y(min(rayon-distance, 1) ,direction)
En diminuant la valeur utilisée dans le lengthdir (1) en dessous de leur vitesse de marche tu peux les repousser plus doucement (de sorte qu'ils peuvent se superposer momentanément pour passer l'un à travers l'autre)


Dernière édition par red-error le Mer 4 Mar 2015 - 11:16, édité 12 fois (Raison : lengthdir_x(len, dir);)
Revenir en haut Aller en bas
Lemente
Petit bavard
avatar

Messages : 58

MessageSujet: Re: AI déplacement ( distance_to_point(), mp_potential_step())   Mer 4 Mar 2015 - 11:40

red-error a écrit:
Lemente a écrit:
Sauf que j'aimerais ajouter des collisions entre les pnj, faire en sorte qu'ils s'évitent, etc ...
Pour cette partie ce que tu peux faire pour simplifier c'est que les pnj se repoussent lorsqu'ils entrent en collisions.

J'essaierai peut être, mais le problème qui risque de se poser, c'est qu'ils vont toujours avancer plus ou moins droit.
J'aurais aimé qu'ils paraissent un peu plus intelligents, et imprévisibles.

Enfin pour l'instant ton option est la meilleure que j'ai, merci Smile
Revenir en haut Aller en bas
Lemente
Petit bavard
avatar

Messages : 58

MessageSujet: Re: AI déplacement ( distance_to_point(), mp_potential_step())   Jeu 5 Mar 2015 - 22:06

Du coup, personne ne sait comment faire pour qu'un objet crée un autre objet au démarrage d'une room, et puisse utiliser sa position avec mp_potential_step().

La difficulté, c'est de faire en sorte que l'objet "primaire" ne se trompe pas, qu'il ne choisisse pas un objet à suivre au hasard, mais qu'il reste toujours lié au même.

C'est possible ça?
Revenir en haut Aller en bas
onilink_
Modérateur
avatar

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

MessageSujet: Re: AI déplacement ( distance_to_point(), mp_potential_step())   Jeu 5 Mar 2015 - 23:04

Oui dans le create de ton objet tu fais juste follow = instance_create(...)
et follow contiendra l'id de ta fameuse instance a suivre.

_________________
                 
Revenir en haut Aller en bas
Lemente
Petit bavard
avatar

Messages : 58

MessageSujet: Re: AI déplacement ( distance_to_point(), mp_potential_step())   Jeu 5 Mar 2015 - 23:15

onilink_ a écrit:
Oui dans le create de ton objet tu fais juste follow = instance_create(...)
et follow contiendra l'id de ta fameuse instance a suivre.

Ah, cool, je connaissais pas ça !

Et ensuite je peux utiliser "follow.x" "follow.y" ou tout autre variables de l'objet follow, c'est bien ça?
Revenir en haut Aller en bas
onilink_
Modérateur
avatar

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

MessageSujet: Re: AI déplacement ( distance_to_point(), mp_potential_step())   Jeu 5 Mar 2015 - 23:27

Yep.

_________________
                 
Revenir en haut Aller en bas
Lemente
Petit bavard
avatar

Messages : 58

MessageSujet: Re: AI déplacement ( distance_to_point(), mp_potential_step())   Jeu 5 Mar 2015 - 23:30

onilink_ a écrit:
Yep.

Super, ça marche.
Merci !
Revenir en haut Aller en bas
Contenu sponsorisé




MessageSujet: Re: AI déplacement ( distance_to_point(), mp_potential_step())   

Revenir en haut Aller en bas
 
AI déplacement ( distance_to_point(), mp_potential_step())
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» [Résolu] Déplacement case par case
» [particule] déplacement aléatoire (lucioles)
» Déplacement moyen
» Déplacement de plusieurs personnages silmultanéments
» Placement chat box

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: