Test de collision entre 2 rectangles

Soyez le premier à donner votre avis sur cette source.

Snippet vu 6 385 fois - Téléchargée 27 fois

Contenu du snippet

Cette fonction renvoie 'TRUE' si R1 et R2 entre en collision sinon elle renvoie 'FALSE'.
Je l'utilise dans des jeux que j'ai fait du genre a la Mario, ou meme un RPG.

Bonne prog.

Source / Exemple :


function TestCollide(const r1, r2 : TRect) : boolean;
begin
  result := 
    (InRange(r1.left,r2.left,r2.right) OR InRange(r1.right,r2.left,r2.right)) 
    AND 
    (InRange(r1.top,r2.top,r2.bottom) OR InRange(r1.bottom,r2.top,r2.bottom));
end;

A voir également

Ajouter un commentaire

Commentaires

Mokost
Messages postés
48
Date d'inscription
jeudi 18 décembre 2003
Statut
Membre
Dernière intervention
29 mars 2010

Je l'ai testé plusieurs fois et j'ai remarqué qu'elle ne fonctioné pas trés bien !
Elle a quelques bugs cette fonction. Si vous trouvez le comment du pourquoi prevenez moi.
f0xi
Messages postés
4200
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
2 janvier 2019
26
lol, merci mokost, mais cela reste TA source! loin de moi l'idée de m'approprier celle ci!

par contre n'oublis pas de preciser qu'elle necessite l'unité MATH pour la fonction InRange().

on pourrais egalement en dire que c'est grace a l'utilisation des operateurs logiques sur les booleens (inrange renvois true ou false) qui permet d'obtenir le resultat rapidement.

preciser egalement qu'il ne faut pas oublier les parentheses pour separarer les deux condition sur X et Y ...
attention : R+L.T+B <> (R+L).(T+B)

l'avantage egalement c'est que cette methode peu s'appliquer a d'autre utilisation pour gerer par exemple un depot Drag&Drop sur une fiche ou un deplacement d'objet ou encore simplement verifier ou est le curseur de souris par rapport a un objet sur la fiche.

Je pense que a partir de cela, tu pourrais nous ecrire quelques methodes sympathique, toujours dans la meme optique, et completer ainsi ton code source avec c'est nouvelles fonctions.
mais la, libre a toi... ^^
Mokost
Messages postés
48
Date d'inscription
jeudi 18 décembre 2003
Statut
Membre
Dernière intervention
29 mars 2010

de ce pas je la change, du coup ce n'est plus ma source mais celle de f0xi
f0xi
Messages postés
4200
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
2 janvier 2019
26
hihi, ben disons qu'a force de vous lire et d'avoir vos conseils, je suis trés inspiré pour ecrire du code leger, propre et performant. d'ou le "indirectement inspiré".
f0xi > Ah bon, je t'ai inspiré cette méthode ? Ca devait être mon clone :lol:
Sinon, Mokost, penses à modifier ta source. Ce serait bête de garder ce code alors que f0xi t'a donné quelque chose de mieux.

... ++ Flo

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.