CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[IA et rang] position de course

vlag67
vlag67
Niveau 8
29 novembre 2005 à 18:53:50

Salut!
Alors si je poste ici c´est pour un petit probleme de position et d´intelligence artificielle pour un jeux de course sous blender:

le moteur est fait, no problemo ^^, par contre j´ais un soucis concernant l´AI et les position.

L´AI a la limite je vois comment je pourrais faire, mais cette solution est longue et pas claire, facilement embrouillable. Alors si quelqu´un pourais me donner un piste à exploiter pour recréer une AI pour jeux de course, sans faire ma solution ( ==> faire sur un chemin en mesh, et faire suivre ce chemin par les bots), ce qui reviendrait a dire que tous les com seront sur le meme chemin, en meme temps, et comme je l´ais dit en haut, c´est long et pas très propre ^^

idem pour le rang des joueurs, je vois pas trop comment indiquer à la machine qu´un joueur est devant un autre ; je peut pas dire que celui qui a parcourut le plus de distance est devant puisqu´un tour est rond, ni celui qui est le plus près de la ligne d´arrivée, et en fait toutes mes propositions reviennent au meme points : elles marchent pas parce q´un tour est rond, et/ou que si le joueur fait des zigzags il parcourt autant de distance qu´un autre, mais l´autre sera devant^^

si quelqu´un à une piste ou une solution a me donner, sa m´aiderait beaucoup!!

Merci d´avance

Lapintade
Lapintade
Niveau 30
29 novembre 2005 à 19:20:25

Pour cela tu peux utiliser des courbes.

Le plus simple : Tu defini une ou plusieurs courbe qui represente les trajectoires de tes voitures. Les IA suivront ces courbes (qui sont juste des lignes). Pour la position, il est trés simple de connaitre la distance parcourue sur une courbe.
Pour pimenter les IA,tu peux le demander de changer de courbe de temps a autre, ou alors de se decaler par rapport aux courbes, ce qui donne un effet plus "naturel".
Ainsi tu peux reduire ton probleme 3D, en un simple problem 1D (pour le calcul de la distance). Pour les trajectoires, c´est du suivi de courbe, c´est un peu plus complexe, mais ca reste faisable.

godrik
godrik
Niveau 30
29 novembre 2005 à 19:22:24

il y a deux questions: l´IA et le rang. et pourtant je ne vais faire qu´une seule reponse.

tu calcule pour chaque "case" (si tu es en continue, tu discrétises) la distance a la ligne d´arrivé. (c´est la que la réponse se dédouble) l´IA voit pour aller a la case de plus petite distance a la igne d´arrivé. pour le ragn, tu classes les vehicules par distance croissante a la ligne d´arrivé

vlag67
vlag67
Niveau 8
29 novembre 2005 à 19:23:13

a ouai je vois (le pire c´est que c´est ce a quoi je pensai sauf en plus embrouillé et plus long ^^ )
je vais faire sa, merci lapintade!!

vlag67
vlag67
Niveau 8
29 novembre 2005 à 19:25:57

a désolé godrik j´avais pas vu le post
qu´est-ce que tu entend par "case"?
sinon pour le rang sa marche pas, puisque un tour est rond, ainsi un vehicule qui serait deriere la ligne d´arrivé serait a la meme distance que quelqu´un devant...

godrik
godrik
Niveau 30
29 novembre 2005 à 19:49:58

ca tu triche un peu, tu compte quand il passe la ligne d´arrivé :)
j´entendais couper ton jeu en case.
si tu es en 2D, imagine que tu es sur une feuille petit carreau
bien qu´il y ait une difference entre deux point dans la meme case, ca te donne des informations.

JeanYvesYves
JeanYvesYves
Niveau 10
29 novembre 2005 à 23:27:22

j´ai rencontré ce probleme pour le jeu de canyon que je présente sur mon site (voir ma carte)

Si ça t´intéresse : voici comment j´ai fait :
(je ne dis pas que c´est la meilleure solution : c´est "artisanal")

Si tu télécharges le jeu, tu verras vite les courses : des images BMP (une vue de dessus des courses pour faire le highmapping)
les pixels bleu indiquent, pour une position x,y le z : ce qui permet une course en 3D.

bref, ce qu´il faut regarder, c´est les points rouges sur les bitmap : c´est une trajectoire "graphique"
Chaque point rouge a une nuance différente : 255, 254, 253 etc etc !!

cela me permet, en chargeant l´image, d´ordonner les points : je sais quel est le 1er, le 2e, etc !!
Du coup, ces points rouge deviennent des checkpoints nombreux et triés.

il me suffit ensuite, pour les vaisseaux, de leur faire targetter le prochain checkpoint, de tourner pour se mettre en face.
Le checkpoint est validé si la distance (euclidienne) entre le chekpoint et le vaisseau passe en dessous d´un seuil : en gros, des que le vaisseua rentre dans la sphere de son checkpoint, alors il vise le prochain : ce qui lui permet d´avancer.

Pour avoir une trajectoire un peu plus aléatoire, je lui fait viser, non pas exactement le checkpoint, mais un point autour choisi au hasard, ce qui permet des trajectoires différentes pour chaque vaisseau.

Pour le classement :
déja, comme chaque vaisseau sait quel prochain chechkpoint il vise (et le player pareil : meme s´il est pas automatique, quand il passe dans la zone du checkpoint, il faut qu´il garde en mémoire le prochain)

Ainsi, premier test : on peut aisément classer (avec le nombre de checkpoint franchis), une position approximative. Ensuite, la difficulté vient si plusieurs vaisseaux sont au meme checkpoint : dans ce cas la (c´est pas précis), je calcule la ratio des distances entre le chekpoint suivant et précédent... Solution artisanale...

Sinon, comme dit Lapintade, le mieux est de ramener en 1D (comme bcp de jeux), si tu peux faire ça, alors le probleme disparait : la route n´est qu´une courbe paramétrique, et le parametre détermine ta progression : un sort pour le classement et c´est bonard :)

_balooo
_balooo
Niveau 6
30 novembre 2005 à 02:59:20

JeanYvesYves ton système est astucieux, mais je pense que s´encombrer de la gestion d´une image n´est pas forcement nécessaire dans blender puisque tu peux placer des emptys directement sur le circuit, et ainsi jouer sur l´axe Z également.
Mais pour ce qui est des cibles aléatoires autour du checkpoint, c´est vrai que ça doit être bien réaliste !
pour le système de rang, une variable par vehicule paut comptabiliser le nombre de passages de la ligne d´arrivée, et une seconde le checkpoint en cours, tout simplement ? ça donne une approximation correcte non ?

vlag67
vlag67
Niveau 8
01 décembre 2005 à 20:32:11

re, désolé pour le retard des reponses.
Je pense pour mon probleme que je vais prendre la solution 1D de lapintade (plus courte et directe) remixée maison ^^ lol
par contre je vois pas trop comment je pourrais calculer quel IA a parcourut plus de distance sur ces lignes dans blender. A la limite comme dit JYY rajouter des checkpoint sur ces lignes...mais sa fait un peu encombré au final...

en tout cas je vais tester tout sa^^
merci!

grayfoxdie
grayfoxdie
Niveau 8
01 décembre 2005 à 21:01:57

moi jreprendrais l´idée des checkpoints, ton circuit en cercle, tu le sectionne en plusieurs portion

à chaque portion tu mets un checkpoint
checkp1 ; checkp2 ; etc....
et tu fais un truc du genre :
-tu créé une variable position voiture 1 ; de meme pour la voiture 2, 3 etc...
-tu créé une variable distance = position voiture 1 par rapport à la ligne d´arrivé de la portion de circuit ds laquelle la voiture se trouve.

et tu fais : si distance entre position voiture 1 < distance position voit2 < d.p.v.3 , ...
alors = position 1

et de privilégier les voitures qui sont ds les chekpoints plus "avancés"

et t´annule le checkpoint à chaque fois que la voiture en question l´a dépassé
et tu réinitalise les checkpoints au passage de la ligne d´arrivé

chepas si chui clair lol, si non tanpis :D

fracart
fracart
Niveau 5
01 décembre 2005 à 21:11:34

tu devrais peut-etre utiliser un algo du type A* (a star), non?

godrik
godrik
Niveau 30
01 décembre 2005 à 23:15:19

pour fixer les idées, A* N´EST PAS un algorithme de plus court chemin, c´est un algorithme qui TROUVE un chemin.

Il n´est donc pas d´actualité ici.

Sous forums
  • Aide à l'achat Mac
  • Création de Jeux
  • Linux
  • Création de sites web
  • Programmation
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment