Jeux Libres

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


» Les Forums » Création de jeux en C++ » FPS Arme + Impact sur la personne


Aller à la page : 1.

FPS Arme + Impact sur la personne
GaMeR



Grade : Nouveau venu
Inscrit le: 22 Jan 2012, 10:52
Ecrit le: 22 Jan 2012, 10:55             Message non corrigé

Bonjour,

Je souhaite faire que le personne possède une arme qu'il puisse tirer et que lorsqu'elle rentre en impact avec un PNJ ( Personne non joueur ) cela tue le PNJ.

De plus je souhaiterai pouvoir agrandir ma carte mais je n'arrive pas a étendre l'herbe

Merci d'avance. Cordialement.

Ps : En installant la bibliothèque SDL_tff cela provoque toujours mon erreur pour les changement des touches..
  Profil Mail
David



Grade : Expert
Inscrit le: 11 Mai 2005, 20:30
Ecrit le: 13 Fev 2012, 12:52             Message non corrigé

Dessin de l'arme



Pour dessiner l'arme, j'ai simplement ajouté une image 2D à l'écran.

Impact



Pour savoir si un personnage est touché, je fais comme ceci :

- Je dessine la carte sans le personnage
- Je fait un prélèvement du pixel situé sous le viseur à l'aide de la fonction glReadPixels().
- Ensuite je dessine le personnage
- Je refait un prélèvement du pixel situé sous le viseur.
- Si les pixels prélevé ont une profondeur (z-buffer) différente, alors le personnage est touché.

Voici ma version non optimisée de cette méthode.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
bool8 Objet3DStatique::dessiner3D(GLint x, GLint y)
{
   // Fonction : Dessine l'objet a l'ecran et retourne TRUE ssi le dessin de l'objet affecte le point
   
   GLfloat distancePointAvant, distancePointApres;
 
   // Mesure la distance du point
   glReadPixels (x, y, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &distancePointAvant);
 
   // Dessin de l'objet
   this->dessiner3D();
 
   // Remesure la distance du point
   glReadPixels (x, y, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &distancePointApres);
 
   // Retourne TRUE ssi la distance du point a ete modifier pendant le dessin de l'objet
   return distancePointAvant != distancePointApres;
}

J'ai eu perreet la semaine dernière au téléphone et il m'a proposé une autre solution, que voici :

Lorsque le joueur tir,
- Il dessine la carte en noir, sans texture.
- Ensuite, il prend la couleur #000001 et dessine le premier personnage sans texture.
- Puis le deuxième avec la couleur #000002 sans texture.
- Puis le troisième en #0000033 et ainsi de suite.

A la fin du dessin, il prélève la couleur du pixel situé sous le curseur et en déduit le personnage touché :

#000000 -> Personne n'est touché
#000001 -> Le personnage 1 est touché
#000002 -> Le personnage 2 est touché
#000003 -> Le personnage 3 est touché

Ainsi, il ne fait qu'une seule fois le prélèvement du pixel et détermine immédiatement le personnage touché :
1
2
3
4
if (0 == couleur)
{
   this->listePersonnage[couleur-1]->touche();
}

Pour optimiser le tout, il serait astucieux d'attendre la fin de l'exécution des instructions entrées dans le pipeline d'OpenGL avant d'appeler la fonction glReadPixels().

Bien entendu, l'image calculée nécessaire à le déduction des conséquences de l'impact n'a pas à être affichée.

Étendre l'herbe



Dans la méthode void Carte::creerListeAffichage(), à la fin, il y a ceci :
1
2
3
4
5
6
7
8
9
10
11
12
13
    // L'herbe
   glBindTexture(GL_TEXTURE_2D, this->conteneurTextures.texture("herbe.bmp").texture);
 
   // Repetition de la texture suivant les 2 axes
   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
 
   glBegin(GL_QUADS);
   glTexCoord2i(0, 0); glVertex3i(0, 0, 0);
   glTexCoord2i(0, 10); glVertex3i(50, 0, 0);
   glTexCoord2i(10, 10); glVertex3i(50, 50, 0);
   glTexCoord2i(10, 0); glVertex3i(0, 50, 0);
   glEnd();

Les appels à la fonction glVertex3i() permettent de définir l'étendue de l'herbe en X, Y et Z (les 3 paramètres). En augmentant ou en diminuant l'étendue de l'herbe, la texture sera plus ou moins étirée. Il faut donc la répéter. Ici, pour 50 unités, la texture a été répétée 10 fois en X et en Y. Ce sont les valeurs 10 que l'on vois dans les appels à la fonction glTexCoord2i(). J'ai choisi cette valeur arbitrairement.

Pour que la répétition se face sans qu'on la voie, il faut une texture adaptée : les pixels de gauche sont proche des pixel de droite et les pixels du haut sont proche de ceux du bas.


________
Apprenez à créer votre propre FPS en C++ avec OpenGL. C'est pas dur ! :-)
  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

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

Page générée en 0.41 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.