Jeux Libres

Envie de créer un jeu vidéo ?   Le site qui vous accompagne de A à Z.


» Les Forums » A propos de la création de jeux vidéo » Algorithme simplifié


Aller à la page : 1.

Algorithme simplifié
Lo



Grade : Expert
Inscrit le: 26 Dec 2007, 17:33
Ecrit le: 06 Juin 2009, 10:39             Message non corrigé


public class ControlCollision extends Controler {
public ControlCollision (Model model) {
super (model);
}
//Détecte les collisions personnages, segment lors du test de collision au sol.
/**@params
* posisitionsPerso, la position du joueur sur la map.
* pointA : le somme de la pente.
* PointB : le point
*/
public static float calculerPointCollisionAvecTriangle  (Vec3t positionsPerso, Vec3t pointA, Vec3t pointB, Vec3t pointC) {
//Je vais prendre comme repère le point A.
float angle;
float valeur;
//Détermination du vecteur pour la dénivellation par rapport à la hauteur. (vertical.)
Vec3t denivellationC = new Vec3t (pointC.getVec3t()[2], pointA.getVec3t()[1], pointC.getVec3t()[2]);
//Position du sommet par rapport à A pour le produit scalaire.
Vec3t pointCA = denivellationC.additionner (pointA);
//Calcul de l'angle d'inclinaison de la pente du pointA par rapport au sommet.
angle = (float) Math.acos(pointA.produitScalaire(pointCA));
//On vérifie si la pente est inclinée vers le bas ou vers le haut.
if (pointC.getVec3t()[1] > pointA.getVec3t()[1])
angle = - angle;
//Calcul pour savoir de combien le vecteur doit monter par rapport au sommet.
valeur = (float) (positionsPerso.longueur() * Math.cos(angle));
if (pointC.getVec3t()[1] > pointA.getVec3t()[1]) {
//Trasnslation vers le haut.
positionsPerso.translation(valeur, false, true, false);
} else {
angle = -angle;
//Transaltion vers le bas.
positionsPerso.translation(-valeur, false, true, false);
}
//Vecteur pour le calcul de la dénivellation de la base. (horizontal.)
Vec3t denivellationB  = new Vec3t (pointB.getVec3t()[0], pointA.getVec3t()[1], pointB.getVec3t()[0]);
//Position de B par rapport à A pour le produit scalaire.
Vec3t pointBA = pointA.additionner(pointB);
Vec3t denivellationA = pointA.additionner(denivellationB);
//On fait pareil que si dessus mais avec la base.
angle = (float) Math.acos(denivellationA.produitScalaire(pointBA));
if (pointB.getVec3t()[1] < pointA.getVec3t()[1])
angle = -angle;

valeur = (float) (positionsPerso.longueur() * Math.cos(angle));
if (pointB.getVec3t()[1] < pointA.getVec3t()[1])
positionsPerso.translation(valeur, false, true, false);
else
positionsPerso.translation(-valeur, false, true, false);
return valeur;
}

//Détecte les collisions entre deux cylindre.
public static boolean collideWithCylindre (Vec3t posp1, Vec3t posp2, int diamètre) {
float distance = posp1.calculerDistance(posp2);
return (distance <= diamètre) ? true : false;
}
//Détecte les collisions avec les mur.
public static boolean collisionWithBox (Vec3t posBox, Vec3t posPerso, Vec3t[] points) {

float distance = posPerso.calculerDistance(posBox);
Vec3t pointCollision = null, avant;
//Position du personnage par rapport au polygone.
Vec3t posPersoBox = posPerso.additionner(posBox);
//On recherche le point le plus près du personnage.
float distMin = points[0].calculerDistance(posPerso);
int indexMin = 0;
for (int i = 1; i < points.length; i++) {
float dist = points[i].calculerDistance(posPerso);
if (dist < distMin) {
indexMin = i;
}
}
avant = points[indexMin];
//On place l'avant par rapport à la position de la boite.
Vec3t avantPosBox = avant.additionner(posBox);
//On calcule l'angle entre le point de la face et le personnage.
float angle = (float) Math.acos(posPersoBox.produitScalaire(avantPosBox));
//Calcul du rayon par rapport au point le plus près du perso. (Collision imparfaite.)
float rayon = posBox.calculerDistance(points[indexMin]);
//On fait une translation avec la tangeante suivit d'une rotation avec de -angle pour déterminer le point ou se fera la collision avec le perso sur la face.
pointCollision = avant.translation((float) (rayon *  Math.tan(angle)), true, true, true);
pointCollision = avant.rotation(-angle, true, true, true);
//Rayon Entre le centre et le point de collision.
rayon = posBox.calculerDistance(pointCollision);
return (distance < rayon) ? true : false;
}

}


________
Parce qu'on ne peut s'exprimer que par nos créations. ^^
  Profil Mail
Lo



Grade : Expert
Inscrit le: 26 Dec 2007, 17:33
Ecrit le: 08 Juin 2009, 03:33             Message non corrigé

Mwai... il commence à se maintenir mon algorithme mais il y a encore des défauts, ça va vraiment pas être facile, mais je pense pouvoir me débrouiller.

________
Parce qu'on ne peut s'exprimer que par nos créations. ^^
  Profil Mail
 


Aller à la page : 1.


Hébergeur du site : 1and1.fr



Site de création de Jeux Vidéo
Apprenez à créer vos propres Jeux Video

1198704 pages ont été consultées sur le site !
Dont 2235 pages pendant les 24 dernières heures.

Page générée en 0.311 secondes


Nos partenaires
- Otium Production : Aide aux débutants à créer leurs jeux
- Les bibliothèques de développement de jeux vidéo


  © 2005-2012 www.jeux-libres.com - Toute reproduction totale ou partielle du contenu de ce site est strictement interdite.