Bienvenue, Invité. Merci de vous connecter ou de vous inscrire.
Avez-vous perdu votre e-mail d'activation ?

Auteur Sujet: Colision  (Lu 2332 fois)

0 Membres et 1 Invité sur ce sujet

Chrisfield

  • Newbie
  • *
  • Messages: 4
    • Voir le profil
    • E-mail
Colision
« le: Mars 21, 2019, 11:49:58 pm »
Bonjours je suis nouveau dans le domaine de la programmation (1 mois)
et j'ais un problème avec les collisions de mon casse brique si une âme charitable pourrais m'éclairer sa serais apprécier.

je vous donne le code complet:



#include "pch.h"
#include <iostream>
#include <SFML/Graphics.hpp>



int main()
{



   bool Ismove = false;

   sf::RenderWindow window(sf::VideoMode(1280, 800), "My window");




   sf::CircleShape balle(10.f, 10.f);
   balle.setPosition(balle.getPosition().x + 675, balle.getPosition().y + 730);

   sf::RectangleShape raquette(sf::Vector2f(100.f, 20.f));
   raquette.setPosition(raquette.getPosition().x + 640, raquette.getPosition().y + 750);



   while (window.isOpen())
   {

      sf::Event event;
      while (window.pollEvent(event))
      {

         if (event.type == sf::Event::Closed)
            window.close();
      }


      window.clear(sf::Color::Black);


      if (sf::Keyboard::isKeyPressed(sf::Keyboard::A))
      {
         raquette.move(-0.10f, 0.f);
         if (Ismove == false)
         {
            // deplacement
            balle.move(-0.10f, 0.f);
         }

         else
         {

         }

      }

      else if (sf::Keyboard::isKeyPressed(sf::Keyboard::D))
      {

         raquette.move(0.10f, 0.f);
         if (Ismove == false)
         {
            
            balle.move(0.10f, 0.f);



         }


         else
         {

         }

         
      }


      else if (sf::Keyboard::isKeyPressed(sf::Keyboard::Space))
      {
                                                                 //regarde si la valeur est vrais
         Ismove = true;

      }



      if (Ismove == true ) // applique la valeur Ismove
      {



         if (balle.getPosition().y > 0.0 || balle.getPosition().x > 0.0)
         {

            balle.move(0.0f, -0.1f);

         }

         if (balle.getPosition().y < 0.0 || balle.getPosition().x < 0.0)
            {
               
               balle.move(0.0f, 0.1f);
               

            }


         
         
         

      }



         



         window.draw(balle);


         window.draw(raquette);


         window.display();
      

   }
   return 0;
}

G.

  • Hero Member
  • *****
  • Messages: 1593
    • Voir le profil
Re: Colision
« Réponse #1 le: Mars 22, 2019, 12:43:20 am »
j'ais un problème avec les collisions de mon casse brique
Quel problème ?  ???

Citer
balle.move(0.0f, -0.1f);
Je pense que tu peux utiliser une variable ("sf::Vector2f deplacement" par exemple initialisé à 0.0f -0.1f) au lieu de ton 0.0f -0.1f, comme ça quand la direction de la balle change tu as juste à changer la variable.

Pense à bien définir ce que tu veux, essaie de découper en plusieurs tâches simples, ça sera plus facile de le programmer.
Genre "je veux que la balle rebondisse sur les bords de la fenêtre" =
- quand la balle dépasse sur la gauche je veux qu'elle rebondisse vers la droite
- quand la balle dépasse sur la droite je veux qu'elle rebondisse vers la gauche
- quand la balle dépasse sur le haut je veux qu'elle rebondisse vers la bas
- quand la balle dépasse sur le bas je veux qu'elle rebondisse vers la haut (ou game over :p )

ensuite c'est facile :
// dépasse sur la gauche
if (balle.getPosition().x < 0) {
   // rebondir vers la droite
   deplacement.x = 0.1f;
}

// dépasse sur la droite
if (balle.getPosition().x - largeur de la balle > largeur de la fenêtre) {
   // rebondir vers la gauche
   deplacement.x = -0.1f;
}

// blabla pareil avec le haut et le bas, donc avec les y
...

// la balle bouge
balle.move(deplacement);

Ça sera déjà une bonne piste.




Chrisfield

  • Newbie
  • *
  • Messages: 4
    • Voir le profil
    • E-mail
Re: Colision
« Réponse #2 le: Mars 22, 2019, 12:52:27 am »
Merci de m'avoir éclairer :)