If

Résolu
fabman21 Messages postés 22 Date d'inscription vendredi 29 avril 2011 Statut Membre Dernière intervention 13 septembre 2011 - 21 mai 2011 à 08:11
fabman21 Messages postés 22 Date d'inscription vendredi 29 avril 2011 Statut Membre Dernière intervention 13 septembre 2011 - 22 mai 2011 à 07:47
bonjour,
je me trouve confronté à un problème, le suivant :
voila mon code :

If mario1.Left + mario1.Width > piece.Left And mario1.Left < piece.Left + piece.Width And mario1.Top < piece.Top + piece.Height And mario1.Top + mario1.Height > piece.Top Then n n + 1 and piece.Visible False

Mais dès que mario1 se déplace et quitte l'emplacement de la pièce le conteur enlève le 1 donc revient a n or j'aimerais qu'il reste a n + 1

alors j'ai essayé ceci :

If mario1.Left + mario1.Width > piece.Left And mario1.Left < piece.Left + piece.Width And mario1.Top < piece.Top + piece.Height And mario1.Top + mario1.Height > piece.Top Then piece.Visible = False
If piece.Visible False Then n n + 1

mais je fais réaparaitre la piece un peu plus tard donc biensure cela ne marche pas non plus

Ce qu'il faudrait : dès que la condition est respecté alors ce qui suit then reste meme si la condition n'est plus respecté mais je ne sait pas faire


En esperant avoir été le plus claire possible, merci d'avane

VIVE Visual Basic

5 réponses

CGSI3 Messages postés 416 Date d'inscription vendredi 22 février 2008 Statut Membre Dernière intervention 7 janvier 2018 1
21 mai 2011 à 15:53
Bonsoir,
Cela semble assez compliqué a gerer comme situation.
Perso je fais de cette manière:
Tout élément graphique je le met dans un rectangle (ou boite)

System.Drawing.Rectangle
Boite1 = New Rectangle( x, y, x + largeur, y + hauteur) (Mario)
Boite2 = New Rectangle( x, y, x + largeur, y + hauteur) (Pieces N°1)
Boite3 = New Rectangle( x, y, x + largeur, y + hauteur) (Zone interdite)
.....

Verifier un chevauchement (ou collisions) entre ces boites:

Public Function IsCollision2D(ByRef Boite1 As Rectangle, ByRef Boite2 As Rectangle ) As Boolean 
   Dim udttemprect As System.Drawing.Rectangle = Rectangle.Intersect(Boite1, Boite2)
   IsCollision2D = udttemprect <> Nothing
End Function


Ensuite tu as juste a gérer les collisions entre les différents éléments si la fonction renvoi "Vrai"

Autre chose: pour gérer le déplacement des boites, une fois créé, tu as juste a utiliser la fontion offset pour la déplacer
Boite1.Offset(x, y)

cette méthode est si pratique que je positionne mon objet en fonction du rectangle qui lui est lié, cela m'évite pas mal de code.
Cordialement CGSI3
3
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
21 mai 2011 à 10:09
Bonjour,

pas très clair, surtout que l'on ne voit pas vraiment le code (et l'évènement) qui "remet à n"

A ce stade, donc, ,et par instinct : utilisation d'une variable n Static


____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
21 mai 2011 à 10:37
Salut

Revoilà donc ton code avec la coloration syntaxique, pour le lire plus clairement :
If mario1.Left + mario1.Width > piece.Left And _
   mario1.Left < piece.Left + piece.Width And _
   mario1.Top < piece.Top + piece.Height And _
   mario1.Top + mario1.Height > piece.Top Then piece.Visible = False
If piece.Visible False Then n n + 1 

Perso, premier réflexe, je mettrais des parenthèses pour encadrer les additions, cela simplifiera la vie du compilateur (*) et évitera tout risque d'erreur.
En relisant tes conditions, je pense que tes And devraient en fait être des Or. Je ne sais pas ce que tu veux faire avec ce code (pas expliqué), mais je devine (**) qu'il s'agit d'un objet, Mario, et que la pièce doit disparaitre (Visible False) si mario quitte la zone de la pièce.
Littéralement, tu as écrit :
Si le bord droit de mario est après le bord gauche de la pièce
Et que le bord gauche de mario est avant le bord droit de la pièce
Et que le haut de mario est au dessus de la pièce
Et que le bas de mario est en dessous du haut de la pièce
Si on matérialise ces conditions (avec ces And), il faut que :
Mario soit à l'intérieur de la pièce horizontalement
ET que Mario soit à l'extérieur de la pièce verticalement

Est-ce ce que tu veux faire ?

Rien, dans le code que tu nous présente, ne définit le "n - 1" dont tu parles. Difficile de te répondre.

Revois l'aide des instructions If-Then-Else-End If
Regarde aussi l'instruction Select Case qui peut être pratique dans ce genre de décisionnel.

(*) qui n'a pas toujours la vie facile tous les jours, je te garantis
(**) Champion du monde de boule de cristal 2005-2006

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
fabman21 Messages postés 22 Date d'inscription vendredi 29 avril 2011 Statut Membre Dernière intervention 13 septembre 2011
21 mai 2011 à 12:48
re,

Enfaite "n" (Dim n As Integer 0)sert pour un compteur de point dès que mario touche la piece alors n n + 1 donc le compteur augmente de 1

Je reéxplique plus clairement mon problème (enfain j'essaye )
En français ce que j'aimerais faire:
Mario touche une piece, le compteur augmente de 1 et elle disparait. Elle reapparait a un autre endroit mario la retouche le compteur augmente a nouveau de 1 (donc maintenant il est a 2 )Cette opération se répète x fois

Le problème c'est que mon code fait ceci :

Mario touche la piece, le compteur augmente de 1 et elle disparait. Mais lorsque l'utilisateur bouge mario alors le compteur redesend de 1 car mario touche plus la piece. (elle n'est plus visible mais elle toujours au meme endroit il se passe ma meme chose si elle reaparait a un autre endroit )

Il faudrait que si la condition a ete respecté mais actuellement elle n'est plus respecté le compteur reste quand meme sur 1


pour jack:
je ne pense pas que les "or" ne marchent car : (le 1 est mario le 2 la piece)


1 2


les deux objets sont a la meme hauteur donc ces 2 conditions sont respecté
mario1.Top < piece.Top + piece.Height And _
mario1.Top + mario1.Height > piece.Top



mais il faut aussi que les 2 autres soient respectées
mario1.Left + mario1.Width > piece.Left And _
mario1.Left < piece.Left + piece.Width And _

donc and est mieux (enfain je me trompe peut etre

VIVE Visual Basic
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
fabman21 Messages postés 22 Date d'inscription vendredi 29 avril 2011 Statut Membre Dernière intervention 13 septembre 2011
22 mai 2011 à 07:47
Merci a present ça marche
( je ne connaissait pas du tous cette methode mais elle est super
VIVE Visual Basic
0
Rejoignez-nous