COLLISIONS DE BABALLES

Messages postés
390
Date d'inscription
vendredi 18 juin 2004
Statut
Membre
Dernière intervention
7 mai 2009
- - Dernière réponse : cs_rt15
Messages postés
3982
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
- 16 oct. 2007 à 13:26
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/44323-collisions-de-baballes

Afficher la suite 
cs_rt15
Messages postés
3982
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
9 -
"Le plus gros du calcul vient de la recherche des collisions."

Tu peux faire des zones ou utiliser un quadtree. Dans ton cas (A vu de nez de la capture), des zones risques d'être plus appropriée, car tu a pas mal d'objets pas trop mal répartits.

Quand je dis zones, je pense à un bête quadrillage, avec une largeure de case par exemple égale au diamètre de ton plus gros disque. Chaque disque se trouve alors dans une case. Pour chaque disque, tu peux ainsi faire des tests qui portent sur les disques de la même case et sur les 8 cases adjacentes.
cs_Jean_Jean
Messages postés
637
Date d'inscription
dimanche 13 août 2006
Statut
Membre
Dernière intervention
13 décembre 2018
2 -
@ barbichette
Amusant les attractions!
ça donne envie de faire un jeu!
@ jace1975
Je n'ai jamais compris l'utilité de déclarer const b1:tballe? Par défault, ilcomprend si l'on ne met pas const;Non?

Bien à vous!
Jean_Jean
cs_barbichette
Messages postés
243
Date d'inscription
lundi 30 octobre 2000
Statut
Membre
Dernière intervention
15 juillet 2013
-
j'ai mis dans le zip une version directX avec les composants Asphyre
Mais j'ai laissé la version bitmap classique pour ceux qui ne veulent pas installer ces composants.

Par contre, j'ai une question.
Le plus gros du calcul vient de la recherche des collisions.
Si quelqu'un a une solution pour eviter de parcourir plein de fois tous le tableau...
Je pensai peut-êter à une fonction récursive, ou un truc comme ça...

Barbichette
jace1975
Messages postés
84
Date d'inscription
mardi 31 mai 2005
Statut
Membre
Dernière intervention
12 octobre 2007
-
j'ai remplacer ton type currency par single et ca consomme beaucoup moins, comme c'est bizarre

mais sinon l'algo de collision est pas mal, bravo pour le boulot
jace1975
Messages postés
84
Date d'inscription
mardi 31 mai 2005
Statut
Membre
Dernière intervention
12 octobre 2007
-
c'est marrant mais tu devrais mieux écrire tes fonctions
genre :
function iscollision(const b1:tballe; const b2:tballe):boolean;
begin
result:=distance2(AddVect(b1.p,b1.v), AddVect(b2.p,b2.v))<sqr(b1.r+b2.r);
end;

plutot que ça:

function iscollision(b1:tballe; b2:tballe):boolean;
var
a,b:tvect;
dist:Currency;//???????
begin
//distance entre b1 et b2 < somme des rayons
a:= AddVect(b1.p,b1.v);
b:= AddVect(b2.p,b2.v);
dist:=distance2(a,b);
result:=dist<sqr(b1.r+b2.r);
end;