Advertisement
Guest User

Untitled

a guest
Oct 3rd, 2015
347
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.16 KB | None | 0 0
  1. #include <SFML\Graphics.hpp>
  2. #include <cmath>
  3.  
  4. using namespace std;
  5. using namespace sf;
  6.  
  7. Vector2f lerp(Vector2f from,Vector2f to,float t=1)
  8. {
  9.     //jezeli pozycja poczatkowa i koncowa sa takie same, to nie ma przesuniecia!
  10.     if(from==to)
  11.         return Vector2f(0,0);
  12.  
  13.     //policzenie wektora przesuniecia i jego dlugosci
  14.     Vector2f offset=Vector2f(to.x-from.x,to.y-from.y);
  15.     /*float length=sqrtf(offset.x*offset.x+offset.y*offset.y);
  16.  
  17.     //normalizacja wektora
  18.     offset=Vector2f(offset.x/length,offset.y/length);*/
  19.  
  20.     offset.x*=t;
  21.     offset.y*=t;
  22.  
  23.     return offset;
  24. }
  25.  
  26. int main()
  27. {
  28.     //predkosc poruszania okregu
  29.     float speed=5.f;
  30.  
  31.     //stworzenie kola i ustawienie jego poczatkowych wartosci
  32.     CircleShape object;
  33.     object.setRadius(40);
  34.     object.setOrigin(40,40);
  35.     object.setFillColor(Color(250,250,250));
  36.     object.setPosition(300,300);
  37.  
  38.     //stworzenie punktu i ustawienie jego poczatkowych wartosci
  39.     CircleShape point;
  40.     point.setRadius(5);
  41.     point.setOrigin(5,5);
  42.     point.setFillColor(Color(100,100,100));
  43.     point.setPosition(300,300);
  44.  
  45.     //stworzenie okna
  46.     ContextSettings settings;
  47.     settings.antialiasingLevel=7;
  48.     RenderWindow window(VideoMode(600,600),"Poruszanie obiektu za kursorem",Style::Close,settings);
  49.     window.setFramerateLimit(128); //<- jezeli chcemy zaoszczedzic na CPU
  50.  
  51.     //zegar do liczenia czasu pomiedzy klatkami
  52.     Clock clock;
  53.     float delta=0;
  54.  
  55.     //petla glowna
  56.     while(window.isOpen())
  57.     {
  58.         Event event;
  59.  
  60.         if(Mouse::isButtonPressed(Mouse::Left))
  61.         {
  62.             point.setPosition((Vector2f)Mouse::getPosition(window));
  63.             point.setFillColor(Color(250,0,0));
  64.         }
  65.         else
  66.             point.setFillColor(Color(100,100,100));
  67.  
  68.         //wyliczenie pozycji wektora przesuniecia
  69.         Vector2f offset=lerp(object.getPosition(),point.getPosition(),delta*speed);
  70.  
  71.         //przesuniecie obiektu o wektor
  72.         object.move(offset);
  73.  
  74.         while(window.pollEvent(event))
  75.         {
  76.             if(event.type==Event::Closed)
  77.                 window.close();
  78.         }
  79.  
  80.         window.clear();
  81.         window.draw(object);
  82.         window.draw(point);
  83.         window.display();
  84.  
  85.         //pobranie przyrostu klatek w ciagu sekundy
  86.         delta=clock.getElapsedTime().asSeconds();
  87.         clock.restart();
  88.     }
  89. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement