A voir également:
- Bloquer des parties d'une image
- Bloquer pub youtube - Accueil - Streaming
- Image iso - Guide
- Légender une image - Guide
- Créer une icone à partir d'une image - Guide
- Bloquer des cellules excel - Guide
2 réponses
Bonjour, il me semble qu'il serait plus simple de disposer des contrôles invisibles (labels par exemples) pour faire tes obstacles.
Il te suffirait de gérer les collisions.
Sinon, tu dois te créer une collection de coordonnées interdites et à chaque mouvement regarder si les bords des ton label ne sont pas dans ces coordonnées.
Il te suffirait de gérer les collisions.
Sinon, tu dois te créer une collection de coordonnées interdites et à chaque mouvement regarder si les bords des ton label ne sont pas dans ces coordonnées.
Chaque label est un rectangle définit par un coin et sa taille.
Il faut que tu regardes si le déplacement amène un des 4 coins du personnage dans le rectangle d'un mur.
Un truc comme ça
S'il y a collision, je ne me suis pas amusé à trouver le déplacement max possible.
Il faut que tu regardes si le déplacement amène un des 4 coins du personnage dans le rectangle d'un mur.
Un truc comme ça
private bool AutoriseDeplacement(int DeltaX, int DeltaY, out Point NouvellePosition) { //tous les murs contiennent "Mur" dans leur nom List<Label> murs = this.Controls.OfType<Label>().Where(l => l.Name.Contains("Mur")).ToList(); //Calcul de la nouvelle position du personnage NouvellePosition = new Point(lblPerso.Location.X, lblPerso.Location.Y); NouvellePosition.Offset(DeltaX, DeltaY); List<Point> coinsPerso = new List<Point>{ NouvellePosition, new Point(NouvellePosition.X, NouvellePosition.Y + lblPerso.Height), new Point(NouvellePosition.X + lblPerso.Width, NouvellePosition.Y), new Point(NouvellePosition.X + lblPerso.Width, NouvellePosition.Y + lblPerso.Height) }; //Test de collision foreach (Label mur in murs) foreach (Point coin in coinsPerso) if (coin.X >= mur.Location.X && coin.X <= mur.Location.X + mur.Width && coin.Y >= mur.Location.Y && coin.Y <= mur.Location.Y + mur.Height) return false; //si on arrive jusqu'ici, c'est qu'il n'y a pas de collision return true; } private void button1_Click(object sender, EventArgs e) { Point nouvellePosition; if (AutoriseDeplacement(10, 5, out nouvellePosition)) lblPerso.Location = nouvellePosition; else MessageBox.Show("Boom !"); }
S'il y a collision, je ne me suis pas amusé à trouver le déplacement max possible.
Encore merci !