예제 #1
0
        private void gestionCollision()
        {
            Vector2 v;

            // Test de collision
            float[] infosBalle = { uneballe.Position.X, uneballe.Position.Y, TAILLEX, TAILLEY };
            int[]   posRel;
            // avec les raquettes
            // On récupère la vitesse courante
            v = uneballe.Vitesse;
            if (Moteur2D.testCollision(this, this.raquette.Bbox))
            {
                // Le prochain mouvement entraîne une collision, on évalue la position relative de la balle
                // par rapport à la raquette pour mettre à jour le vecteur vitesse
                float[] infosRaquette = { raquette.Uneraquette.Position.X, raquette.Uneraquette.Position.Y, raquette.Uneraquette.Size.X, raquette.Uneraquette.Size.Y };
                posRel = Moteur2D.getRelativePosition(infosBalle, infosRaquette);

                if (posRel[0] == Moteur2D.CROISEMENT)
                {
                    v.Y *= -1;

                    if (Math.Abs(v.Y) < v_max.Y)
                    {
                        v.Y *= 1.2f;
                    }
                    uneballe.Vitesse = v;
                }

                // Si les 2 objets se croisent sur l'axe des Y
                if (posRel[1] == Moteur2D.CROISEMENT)
                {
                    v.X *= -1;
                    if (Math.Abs(v.X) < v_max.X)
                    {
                        v.X *= 1.2f;
                    }
                    uneballe.Vitesse = v;
                }

                SoundEffectInstance soundInstRaquette = soundRaquette.CreateInstance();
                soundInstRaquette.Volume = 0.3f;
                soundInstRaquette.Play();
            }


            gestionCollisionBrique();
        }
예제 #2
0
        public override void Update(GameTime gameTime)
        {
            bbox = new BoundingBox(new Vector3(uneraquette.Position.X, uneraquette.Position.Y, 0),
                                   new Vector3(uneraquette.Position.X + uneraquette.Texture.Width, uneraquette.Position.Y + uneraquette.Texture.Height, 0));

            // La classe Controls contient les constantes correspondantes aux contrôles définies sur la plate-forme
            // et des méthodes, pour chaque action possible dans le jeu, qui vérifient si les contrôles correspondants
            // ont été "enclenchés"
            if (Controls.CheckActionDroite())
            {
                if (!Moteur2D.testCollision(this, this.Balle.Bbox))
                {
                    // Est-ce qu'on est tout à droite  ?
                    if (uneraquette.Position.X + uneraquette.Texture.Width < maxX)
                    {
                        // On passe par un vecteur intermédiaire
                        // pour initialiser la nouvelle position
                        float tempo = uneraquette.Position.X;
                        tempo += uneraquette.Vitesse.X;
                        Vector2 pos = new Vector2(tempo, uneraquette.Position.Y);
                        uneraquette.Position = pos;
                    }
                }
                //else Console.WriteLine("CheckActionDown (joueur" + joueur + ") --> collision ");
            }
            else if (Controls.CheckActionGauche())
            {
                if (!Moteur2D.testCollision(this, this.Balle.Bbox))
                {
                    // Est-ce qu'on est tout à gauche ?
                    if (uneraquette.Position.X > minX)
                    {
                        // On passe par un vecteur intermédiaire
                        // pour initialiser la nouvelle position
                        float tempo = uneraquette.Position.X;
                        tempo -= uneraquette.Vitesse.X;
                        Vector2 pos = new Vector2(tempo, uneraquette.Position.Y);
                        uneraquette.Position = pos;
                    }
                }
                // else
                //Console.WriteLine("CheckActionUp (joueur" + joueur + ") --> collision ");
            }

            base.Update(gameTime);
        }
예제 #3
0
        // Test la collision avec les briques
        private void gestionCollisionBrique()
        {
            BoundingBox bbox_brique;
            Brique      unebrique;
            Vector2     v;
            Boolean     collision = false;

            float[] infosBalle = { uneballe.Position.X, uneballe.Position.Y, uneballe.Position.X + TAILLEX, uneballe.Position.Y + TAILLEY };
            int[]   posRel;
            int     x = 0;
            int     y = 0;
            int     tempx = 0, tempy = 0;

            v = uneballe.Vitesse;
            // on teste une collision avec une éventuelle brique
            while (x < NBLIGNES && !collision)
            {
                y = 0;
                while (y < NBCOLONNES && !collision)
                {
                    unebrique = mesBriquesballe[x, y];
                    // On définit uen enveloppe pour la brique
                    bbox_brique = new BoundingBox(new Vector3(unebrique.Position.X, unebrique.Position.Y, 0),
                                                  new Vector3(unebrique.Position.X + unebrique.Size.X, unebrique.Position.Y + unebrique.Size.Y, 0));


                    // on mémorise l'enveloppe
                    if (!unebrique.Marque && Moteur2D.testCollision(this, bbox_brique))
                    {
                        // Le prochain mouvement entraîne une collision, on évalue la position
                        // relative de la balle
                        // par rapport à la raquette pour mettre à jour le vecteur vitesse
                        float[] infosBrique = { unebrique.Position.X, unebrique.Position.Y, unebrique.Position.X + unebrique.Size.X, unebrique.Position.Y + unebrique.Size.Y };
                        posRel = Moteur2D.getRelativePosition(infosBalle, infosBrique);

                        if (posRel[0] == Moteur2D.CROISEMENT && (posRel[1] == Moteur2D.AU_DESSUS || posRel[1] == Moteur2D.EN_DESSOUS))
                        {
                            v.Y *= -1;

                            collx = true;
                            if (Math.Abs(v.Y) < v_max.Y)
                            {
                                v.Y *= 1.1f;
                            }
                            uneballe.Vitesse = v;
                        }

                        // Si les 2 objets se croisent sur l'axe des Y
                        else if (posRel[1] == Moteur2D.CROISEMENT)
                        {
                            v.X *= -1;

                            if (Math.Abs(v.X) < v_max.X)
                            {
                                v.X *= 1.1f;
                            }
                            uneballe.Vitesse = v;
                        }

                        SoundEffectInstance soundInstBrique = soundBrique.CreateInstance();
                        soundInstBrique.Volume = 0.8f;
                        soundInstBrique.Play();
                        collision = true;
                        tempx     = x;
                        tempy     = y;
                        score    += 10;
                    }
                    y++;
                }
                x++;
            }
            if (collision)
            {
                mesBriquesballe[tempx, tempy].Marque = true;
                count++;
            }
        }