Discuss Scratch

aurel222
Scratcher
7 posts

Comment un lutin peut-il éviter un obstacle automatiquement ?

Bonjour à tous,
La question est dans le titre :
Comment un lutin peut-il éviter un obstacle automatiquement ?

Le contexte : Un lutin joueur se ballade dans la scène. Des lutins ‘ordinateurs’ se rapprochent de lui automatiquement. Des lutins ‘arbres’ sont infranchissables, à leur contact les lutins joueur et ordis ont une vitesse du type vitesse lutin = vitesse lutin - vitesse lutin

Lorsqu'un lutin ordi touche un arbre il s'arrête. Si le joueur bouge, le lutin va s'orienter vers lui jusqu'à ce qu'il ne soit plus bloqué.

Avez-vous une idée simple ou vu un exemple de lutin qui évite automatique un obstacle ?

Des idées complexes j'en ai plein, et …. elles sont trop dures à implémenter…

J'espère être clair.

Merci de votre aide !!

Bon WE !
spirou201
Scratcher
500+ posts

Comment un lutin peut-il éviter un obstacle automatiquement ?

en gros tu aimerais faire des robots “intelligents” qui vont contourner les obstacles pour attreper le joueur?
_Foxepvp_
Scratcher
96 posts

Comment un lutin peut-il éviter un obstacle automatiquement ?

Je crois que oui mais j'ai déja essayer et c'est chaud quand même

Black ops Zombie V.1.3 : https://scratch.mit.edu/projects/168175331/ ]



b] Ping Pong multijoueur : https://scratch.mit.edu/projects/167584493/





Jeux de Flash ( The Flash ) : https://scratch.mit.edu/projects/167102095/
VENTADOURFC
Scratcher
11 posts

Comment un lutin peut-il éviter un obstacle automatiquement ?

Quand le monstre touche un obstacle, il faudrait peut-être que tu cesses de t'orienter vers ton hero, que tu recules une 50aine de pas (à voir précisément), que tu tournes de 90°, que tu avance d'une 50aine de pas, puis il peut reprendre sa marche en avant. Le problème étant que le monstre risque de traverser un obstacle pendant une boucle répéter 50 fois. Du coup il faudrait qu'il arrête sa boucle quand il touche du noir.
J'ai testé et ça marche “à peu près”
spirou201
Scratcher
500+ posts

Comment un lutin peut-il éviter un obstacle automatiquement ?

Si c'est le cas moi j'aurais une idée mais qui me semble assez chaude…

Le robot trace une droit allant de chez lui jusqu'àu joueur. S'il touche un arbre sur son passage il tente de tracer une courbe de type parabole passant par lui et le joueur et regarde si elle touche un obstacle. Il change la parabole ensuite petit à petit jusqu'à ce qu'il trouve une courbe qui lui permet d'atteindre le joueur sans passer par un obstacle.
-TSTD-
Scratcher
100+ posts

Comment un lutin peut-il éviter un obstacle automatiquement ?

Ce procédé s'appelle le pathfinding, qui permet de trouver le chemin le plus court pour aller d'un point A à un point B ( ici, le point A c'est l'ennemis, et le B c'est le joueur ) exemple de video : https://www.youtube.com/watch?v=X3x7BlLgS-4 un exemple de projet scratch : https://scratch.mit.edu/projects/1034493/

————————————————————————————-
My profile ! Follow me ! I am French and I like making big projects ! See my games ( and ❤️ them ^^ ) ! Make game on Android using C#. Rappel des règles (en Français). I have two account : TSTD / -TSTD- . Scratch on ! I make this game –>
-TSTD-
Scratcher
100+ posts

Comment un lutin peut-il éviter un obstacle automatiquement ?

Pour le mettre en place, le mieux est de faire un tableau ( dans une liste ).
( une autre video ytb (qui est execellent) sur les I.A., et il explique vite fait le pathding https://www.youtube.com/watch?v=DlgnB4UKU74 )

Grosso modo sa teste tout les déplacements possibles ( après il y a plusieurs programmes de pathfinding, mais je sais en faire qu'un seul )

Tu as 2 types de cases :

les murs et l'air ( bon je pense pas que j'ai besoin d'expliquer la différence entre les deux )

L'ennemis commence dans ce tableau au point A. Sa test chacun de ces déplacements ( droite gauche haut bas et peut être les diagonales, comme tu veux et en ne pouvant pas passer par les murs ) en ajoutant 1 à la case à chaque fois, sachant que la case de départ est à 0.
En plus visuel car les explications c'est pas trop mon truc :

Voilà le tableau.
_ = air
X = mur
A = point A ( départ)
B = point B ( arrivée )

_ _ _ _ _ _ _ _
_ _ _A_ _X X X
_ _ _ _ X B _ _
_ _ _ _ X _ _ _
_ _ _ _ _ _ _ _

étape suivante :

_ _ _ 1 _ _ _ _
_ _ 1 A 1_X X X
_ _ _ 1 X B _ _
_ _ _ _ X _ _ _
_ _ _ _ _ _ _ _

puis

_ _ 2 1 2 _ _ _
_ 2 1 A 1_X X X
_ _ 2 1 X B _ _
_ _ _ 2 X _ _ _
_ _ _ _ _ _ _ _

etc… à la fin tu as

4 3 2 1 2 3 4 5
3 2 1 A 1_X X X
4 3 2 1 X B _ _
5 4 3 2 X 6 _ _
6 5 4 3 4 5 6 _

Et là tu n'as plus qu'a repartir du point B en remontant les nombres, c'est à dire en passant par 6 puis 5 puis 4 …

N'hésiter pas à me dire si vous voulez plus d’explication.

Last edited by -TSTD- (Aug. 12, 2017 20:42:56)


————————————————————————————-
My profile ! Follow me ! I am French and I like making big projects ! See my games ( and ❤️ them ^^ ) ! Make game on Android using C#. Rappel des règles (en Français). I have two account : TSTD / -TSTD- . Scratch on ! I make this game –>
jules0330
Scratcher
69 posts

Comment un lutin peut-il éviter un obstacle automatiquement ?

comment fais tu pour detecter la collision avec une certaine partie d'un lutin (le haut,la droite…etc)
MejihaLiMelhik
Scratcher
66 posts

Comment un lutin peut-il éviter un obstacle automatiquement ?

jules0330 wrote:

comment fais tu pour detecter la collision avec une certaine partie d'un lutin (le haut,la droite…etc)
En principe si tu connais la position de chacun d'eux alors tu peux connaitre leurs positions relatives, et donc tu peux detecter par quelles cotés se font les collisions.

Last edited by MejihaLiMelhik (Nov. 1, 2018 22:09:24)


MejihaLiMelhik
Scratcher
66 posts

Comment un lutin peut-il éviter un obstacle automatiquement ?

aurel222 wrote:

Bonjour à tous,
La question est dans le titre :
Comment un lutin peut-il éviter un obstacle automatiquement ?

Le contexte : Un lutin joueur se ballade dans la scène. Des lutins ‘ordinateurs’ se rapprochent de lui automatiquement. Des lutins ‘arbres’ sont infranchissables, à leur contact les lutins joueur et ordis ont une vitesse du type vitesse lutin = vitesse lutin - vitesse lutin

Lorsqu'un lutin ordi touche un arbre il s'arrête. Si le joueur bouge, le lutin va s'orienter vers lui jusqu'à ce qu'il ne soit plus bloqué.

Avez-vous une idée simple ou vu un exemple de lutin qui évite automatique un obstacle ?

Des idées complexes j'en ai plein, et …. elles sont trop dures à implémenter…

J'espère être clair.

Merci de votre aide !!

Bon WE !
Peux tu préciser s'il te plait, y'a confusion dans ton récit.
Eviter: c'est quand le chemin d'un objet traverse ton point et y'a risque de collision, et tu fais en sorte de sortir de son chemin.
Contourner: C'est quand un objet est dans ton chemin initiale et que tu fais un contour pour continuer ton chemin.
Fuir: en principe c'est dans le sens opposé de l'objet qui vient vers toi

Last edited by MejihaLiMelhik (Nov. 1, 2018 22:07:50)


bidulule
Scratcher
1000+ posts

Comment un lutin peut-il éviter un obstacle automatiquement ?

jules0330 wrote:

comment fais tu pour detecter la collision avec une certaine partie d'un lutin (le haut,la droite…etc)
Le plus simple c'est de faire des hitbox.
Cad des lutins en mode fantôme que tu places aux coordonnées du perso

Dairop
Scratcher
100+ posts

Comment un lutin peut-il éviter un obstacle automatiquement ?

bidulule wrote:

jules0330 wrote:

comment fais tu pour detecter la collision avec une certaine partie d'un lutin (le haut,la droite…etc)
Le plus simple c'est de faire des hitbox.
Cad des lutins en mode fantôme que tu places aux coordonnées du perso

Tricheur, tu profane le 100%pen

((pen projects :: #ff0000) (3D :: #ff4000) (games :: #ff8000) (visualizer :: #ffbf00) (and others :: #ffff00) :: #000000)









bidulule
Scratcher
1000+ posts

Comment un lutin peut-il éviter un obstacle automatiquement ?

Dairop wrote:

bidulule wrote:

jules0330 wrote:

comment fais tu pour detecter la collision avec une certaine partie d'un lutin (le haut,la droite…etc)
Le plus simple c'est de faire des hitbox.
Cad des lutins en mode fantôme que tu places aux coordonnées du perso

Tricheur, tu profane le 100%pen
En effet mouhahahaha
Mais j'ai dit “le plus simple”
(Bien aue le 100%pen facilite certaines choses une fois qu'on sait l'utiliser)

Itharius
Scratcher
1000+ posts

Comment un lutin peut-il éviter un obstacle automatiquement ?

MejihaLiMelhik wrote:

jules0330 wrote:

comment fais tu pour detecter la collision avec une certaine partie d'un lutin (le haut,la droite…etc)
En principe si tu connais la position de chacun d'eux alors tu peux connaitre leurs positions relatives, et donc tu peux detecter par quelles cotés se font les collisions.

je crois voir le principe si les 2 lutins sont une boule mais si l'un des deux lutins est un labyrinthe, je vois pas comment faire sans passer par des hitbox ?
Dairop
Scratcher
100+ posts

Comment un lutin peut-il éviter un obstacle automatiquement ?

Itharius wrote:

MejihaLiMelhik wrote:

jules0330 wrote:

comment fais tu pour detecter la collision avec une certaine partie d'un lutin (le haut,la droite…etc)
En principe si tu connais la position de chacun d'eux alors tu peux connaitre leurs positions relatives, et donc tu peux detecter par quelles cotés se font les collisions.

je crois voir le principe si les 2 lutins sont une boule mais si l'un des deux lutins est un labyrinthe, je vois pas comment faire sans passer par des hitbox ?

Il faut créer une hit-box mais virtuelle C'est le même principe que pour trouver le chemin le plus court et @-TSTD- l'a très bien expliqué:
On à un lutin (ton labyrinthe si tu veux) mais de 9 pixels (plus compréhensible) définit par une variable de 0 (pas de pixel) et de 1 (présence d'un pixel)
On peut la représenter comme un grille:
0 0 0
0 0 0
0 0 0

Donnons une forme au lutin:

1 1 0
0 1 1
1 0 1

Ensuite, on à un “mur (obstacle d'une forme quelconque” que l'on ne veut pas traverser, donc trouver si il est touché. Lui même est définit par une grille:

0 0 1
0 1 0
0 0 1

On va ensuite tester si, selon les positions à l'écran des lutins, deux “1” sont sur la même “case/pixel”

Ou on a une autre méthode: définir tes lutins par des vecteurs.
On stocke les vecteurs définissants les segments des lutins, et on teste si les deux lutins ont des segments passant par un même point.


Après on à rarement besoin de faire des collisions avec deux objets très complexes, si tu as par exemple un carré et un labyrinthe, tu va simplement pouvoir tout mettre dans une seule liste contenant par exemple 0 pour du vide, 1 pour un mur et 2 pour le joueur. Si la case correspondante à la position du joueur + sa vitesse contient un 1, alors heurter le mur et ne pas avancer, sinon avancer normalement

Désolé si ce n'est pas très clair, j'ai un peu de mal à expliquer ce genre de choses mais tout est possible avec la programmation en pen, souviens toi de ça ^^

Last edited by Dairop (Nov. 9, 2018 21:21:17)


((pen projects :: #ff0000) (3D :: #ff4000) (games :: #ff8000) (visualizer :: #ffbf00) (and others :: #ffff00) :: #000000)









Powered by DjangoBB