[C] : Probleme pour afficher une image avec une condition.
Forum Programmation : [C] : Probleme pour afficher une image avec une condition.
Bonsoir a tous,
Tout d'abord je tiens a m'exscuser du titre un peu long parce que je savais pas quoi mettre ! ^^
Alors voila mon probleme :
J'ai 4 images : une mitraillette normal, une meme mitraillette mais avec du "feu" autour (comme si on tirait), une cible, et une cible troué.
J'ai donc afficher la mitraillette normal, et quand on appuie sur Espace : ça charge l'image de la mitraillette en tir et donc ça fait comme si on tirait.
J'ai aussi afficher la cible plus haut sur la fenetre (pour faire un effet de distance entre l'arme et la cible).
Et je voulais ecrire dans une condition :
SI la position x (de gauche a droite) de la mitraillette en tir est égale a la position x de la cible ALORS on charge l'image de la cible trouée.
Ce qui fait comme si on avait tiré sur la cible.
Le probleme c'est que je ne sais pas ou placer ma condition dans mon code !
Si vous pouvez m'aidez ou me donnez des conseils, je vous en remercie, voici donc mon code ^^ :
Code :
|
Comme vous le voyez, j'ai fait expres de mettre la position X de la cible et de la mitraillette au meme endroit pour que quand on tire (j'ai pas encore mis les déplacements), ça touche directement la cible !
Voici un screenshot :
Je vois pas quoi dire de plus, merci et désolé pour le ptit roman
Ptit résumé du probleme :
Afficher l'image de la cible troué dans une condition (que j'ai mis plus haut)
Et encore merci d'avance
Message édité par Kicko le 08-03-2007 à 20:36:28
Tu peux faire le test juste après avoir tiré.
Ne fait pas un test (x == 500), mais plutot un test dans une zone : (x > 490 && x < 510.
)
81F900FA750230EDBADA03ECA80875FBECA808
74FBE4603C0175DFB80300CD10B8004CCD21
Répondre à CRicky
J'ai fais
Code :
|
en dehors de la boucle principale...
Le programme se lance mais quand je tire, ça n'affiche pas la cible troué
En faite ce que je voudrais savoir, c'est ou placé ma condition pour qu'elle fonctionne et quel shéma de code je dois faire (si x = y alors etc... ^^)
En début, tu déclares une variable, qui indique l'état de ton jeu
Code :
|
Tu commence à 0, c'est le mode que tu as actuellement. L'état 1 sera l'état où tu auras détruit la cible. Donc, il te faut passer de l'état 0 à l'état 1 en faisant le test que tu as fait, mais fait le dans le CASE:
Code :
|
81F900FA750230EDBADA03ECA80875FBECA808
74FBE4603C0175DFB80300CD10B8004CCD21
Répondre à CRicky
Ca marche impec
En faite au début ça s'affichait pas mais j'ai mis dans le if :
Code :
|
Et ça fonctionnait ^^
Je te remercie, tu m'as vraiment aidé
Message édité par Kicko le 09-03-2007 à 12:52:40
Re-bonjour la compagnie ^^
Je voudrais pas recréér de post pour ça mais j'ai un autre ptit probleme !
Si je fais bouger la cible, quand on tire dessus on ne connaitra pas sa position !
Et je voudrais faire un tir dans une "zone" comme "Criky" la fait en dessous...
Sauf que la c'est pas la meme chose !
J'ai décidé de faire autrement, sur mon code, je met un viseur a la place de la souris, et je place une cible (une souris en faite
> animal bien sur), et quand on tire dessus ça affiche une tache de sang.
Ca je sais le faire, mais si jveux faire déplacé la cible et que jveux faire un tir de zone (ça veut dire que meme si on tire 10px a coté ça marche), comment faire ?
Puisque la position de la cible ne sera jamais la meme puisqu'elle bougera, comment faire pour creer un tir de zone ?
Merci !
Voici mon code si jamais :
Code :
|
Encore merci !
EDIT : Désolé ça met tout en pavé (le code) malgré les sauts de ligne que j'ai fait dans le message >><<
J'espere que ça sera lisible
Message édité par Kicko le 10-03-2007 à 14:17:08
* Pour une zone carrée:
si "zoneX" et "zoneY" sont la position centrale de la zone, si la moitié de largeur et hauteur de la zone est "taille", si la position de la souris est "x" et "y", alors il suffit de faire le test des 4 droites: x > zoneX - taille && x < zoneX + taille && y > zoneY - taille && y < zoneY + taille
* Pour une zone circulaire (moins performant car plus de calculs) :
Il faut calculer la distance entre le centre de la zone et le curseur, et il suffit de tester si la distance est inférieure au rayon du cercle.
Mathématiquement, c'est Pythagore:
Racine((zoneX - x)² + (zoneY - y)²) < rayon
Le calcul de racine étant complexe (et donc prend du temps), il faut faire le test en élevant tout au carré:
(zoneX - x) * (zoneX - x) + (zoneY - y) * (zoneY - y) < rayonCarre
donc si on teste une distance de 100 pixels, il faudra que rayonCarre = 10000
81F900FA750230EDBADA03ECA80875FBECA808
74FBE4603C0175DFB80300CD10B8004CCD21
Répondre à CRicky
Je trouve pas
J'ai fait ceci :
Code :
|
(Je ferais plus beau apres...)
Et dans mon if :
Code :
|
D'ou la formule que tu m'as donné...
puisque x = position dla souris.x et y = position dla souris.y, je remplace les X et Y par event.motion.x et ".".y.
J'ai déclaré ZoneX étant le milieu dla largeur et ZoneY étant la moitié dla hauteur et taille = la moitié de la largeur et hauteur...
J'ai du me gourrer quelque part (je suis pas trop doué dans les gros calculs comme ça
En faite ce code marche, mais quand je clique, ça tue automatiquement la cible...Meme si jsui a 200px de la cible...
Si on remplace le "+" de "taille" par un "-" , je dois encore une fois tirer pile poil ou est placé le coin en haut a gauche de l'image. (0x et 0y pour l'image en faite ^^)
Faudrait en faite creer une variable qui dit a combien de pixel je veux que ça tire maximum non ? (C'est ptet ce que tu voulais me dire par ZoneX et ZoneY ou par taille ? )
Encore Merci ^^
Message édité par Kicko le 10-03-2007 à 19:29:29
Le test est correct, c'est le calcul de "taille" qui a l'air bizarre. "taille" n'est que la largeur du carré. Si tu veux que ça tue à 10pixels, met 10 dans taille.
| Citation : Faudrait en faite creer une variable qui dit a combien de pixel je veux que ça tire maximum non ? |
En fait c'est "taille"
81F900FA750230EDBADA03ECA80875FBECA808
74FBE4603C0175DFB80300CD10B8004CCD21
Répondre à CRicky
Si je met 10 dans "taille", ça ne tue plus la cible quelque soit la position...
Et j'ai mis la largeur dans "taille" mais ça tue sur une trop grande distance alors j'ai changé et j'ai mis :
(400 / 2) - (200 / 2)
Ca tue aux bons alentours ^^
Encore une fois tu m'as aidé merci
Dés que j'aurais fini le jeu etc.. je ferais ptet un passage ici pour le mettre et le presenté (bon c'est du bas niveau mais c'est toujours ça ^^)
Merci encore, je pense ne plus avoir de probleme pour la suite
Il y a 320 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.
