示例#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
        // 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++;
            }
        }