Bloquer des parties d'une image

Fermé
Matador8512 Messages postés 3 Date d'inscription samedi 19 mai 2018 Statut Membre Dernière intervention 20 mai 2018 - 19 mai 2018 à 18:26
 Utilisateur anonyme - 20 mai 2018 à 18:25
Bonjour,
Je dois pour le lycée créer un jeu, (spécialité ISN) j'ai donc décidé de le faire en c# car c'est le language qui convenait le mieux pour mon projet. Mon but étant de faire un jeu relativement simple avec une image en fond, un personnage (label) qui se déplace sur l'image. Je suis actuellement bloqué, j'aimerais pouvoir bloquer l'accès aux pixels qui font les murs de l'image, pour avoir une vraie pièce vue de haut, mais je n'y arrive absolument pas ... quelqu'un peut-il m'aider ?
En gros l'image est une image d'une maison vue du dessus avec différentes pièces séparées par des murs. Je souhaite bloquer les murs a mon label, car la il se déplace sur toute l'image..

Merci !


A voir également:

2 réponses

Utilisateur anonyme
19 mai 2018 à 19:06
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.
1
Matador8512 Messages postés 3 Date d'inscription samedi 19 mai 2018 Statut Membre Dernière intervention 20 mai 2018
19 mai 2018 à 19:35
Merci de ta réponse, et oui effectivement je n'ai même pas pensé à utiliser les labels, par contre je ne sais pas comment les rendre "invisible" peut-tu m'éclairer la dessus ? Sinon je me renseignerai..
Encore merci !
0
Utilisateur anonyme
19 mai 2018 à 20:00
Background transparent
0
Matador8512 Messages postés 3 Date d'inscription samedi 19 mai 2018 Statut Membre Dernière intervention 20 mai 2018
20 mai 2018 à 11:34
Je ne veux pas prendre tout ton temps, mais je galère à gérer la collision entre mes deux labels, (un mur et mon personnage pour l'instant) je ne comprends pas comment empêcher le personnage de passer au travers du label qui correspond au mur, et je ne trouve pas ma réponse sur internet, mes profs n'étant plus là pour m'aider ^^
0
Utilisateur anonyme
20 mai 2018 à 18:25
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
        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.
0