Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <SFML\Graphics.hpp>
- #include <cmath>
- using namespace std;
- using namespace sf;
- Vector2f lerp(Vector2f from,Vector2f to,float t=1)
- {
- //jezeli pozycja poczatkowa i koncowa sa takie same, to nie ma przesuniecia!
- if(from==to)
- return Vector2f(0,0);
- //policzenie wektora przesuniecia i jego dlugosci
- Vector2f offset=Vector2f(to.x-from.x,to.y-from.y);
- /*float length=sqrtf(offset.x*offset.x+offset.y*offset.y);
- //normalizacja wektora
- offset=Vector2f(offset.x/length,offset.y/length);*/
- offset.x*=t;
- offset.y*=t;
- return offset;
- }
- int main()
- {
- //predkosc poruszania okregu
- float speed=5.f;
- //stworzenie kola i ustawienie jego poczatkowych wartosci
- CircleShape object;
- object.setRadius(40);
- object.setOrigin(40,40);
- object.setFillColor(Color(250,250,250));
- object.setPosition(300,300);
- //stworzenie punktu i ustawienie jego poczatkowych wartosci
- CircleShape point;
- point.setRadius(5);
- point.setOrigin(5,5);
- point.setFillColor(Color(100,100,100));
- point.setPosition(300,300);
- //stworzenie okna
- ContextSettings settings;
- settings.antialiasingLevel=7;
- RenderWindow window(VideoMode(600,600),"Poruszanie obiektu za kursorem",Style::Close,settings);
- window.setFramerateLimit(128); //<- jezeli chcemy zaoszczedzic na CPU
- //zegar do liczenia czasu pomiedzy klatkami
- Clock clock;
- float delta=0;
- //petla glowna
- while(window.isOpen())
- {
- Event event;
- if(Mouse::isButtonPressed(Mouse::Left))
- {
- point.setPosition((Vector2f)Mouse::getPosition(window));
- point.setFillColor(Color(250,0,0));
- }
- else
- point.setFillColor(Color(100,100,100));
- //wyliczenie pozycji wektora przesuniecia
- Vector2f offset=lerp(object.getPosition(),point.getPosition(),delta*speed);
- //przesuniecie obiektu o wektor
- object.move(offset);
- while(window.pollEvent(event))
- {
- if(event.type==Event::Closed)
- window.close();
- }
- window.clear();
- window.draw(object);
- window.draw(point);
- window.display();
- //pobranie przyrostu klatek w ciagu sekundy
- delta=clock.getElapsedTime().asSeconds();
- clock.restart();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement