2016-10-13 4 views
-1

В принципе, я пытаюсь повернуть квадрат вокруг 2 очков одновременно.Вращение вокруг 2 точек в то же время

Здесь, когда мышь идет влево или вправо, я пытаюсь повернуть квадрат вокруг его центра, а когда мышь идет вверх или вниз, я вращаюсь вокруг любой другой точки (здесь 50: 100). Тем не менее, мой квадрат прыгает по экрану, и когда я пытаюсь вращаться только по центру, он продолжает вращаться вокруг 50: 100. Любые предложения, как это исправить?

#include <SFML/Graphics.hpp> 
using namespace sf; 

    Event evt; 

    int main(int argc, char* argv) 
    { 
RenderWindow window(VideoMode(600, 600), "test"); 

RectangleShape test(Vector2<float>(20.0f, 20.0f)); 
test.setFillColor(Color::Red); 
test.setPosition(300, 300); 
test.setOrigin(10, 10); 


Clock deltaTime; 
Clock timer; 
timer.restart(); 

int mouseX = 0, mouseY = 0; 
int curMouseX = 0, curMouseY = 0; 
float offset = 100; 
bool moving = false; 

while (window.isOpen()) 
{ 
    while (window.pollEvent(evt)) { 
     switch (evt.type) 
     { 
     case Event::MouseMoved: 
      curMouseX = mouseX; 
      curMouseY = mouseY; 
      mouseX = evt.mouseMove.x; 
      mouseY = evt.mouseMove.y; 
      moving = true; 
      break; 
     } 
    } 

    float elaspedTime = deltaTime.restart().asSeconds(); 

    if (curMouseX != mouseX && moving) { 

     test.setOrigin(10, 10); 
     test.rotate(360 * elaspedTime); 
     // test.setOrigin(50, 100); Tried this to avoid jumping. When uncommented, doesn't rotate around the center. 
    } 

    if (curMouseY != mouseY && moving) { 
     test.setOrigin(50, 100); 
     test.rotate(60 * elaspedTime); 
    } 
    window.clear(); 
    window.draw(test); 
    window.display(); 
    moving = false; 
} 

return 0; 
    }  
+0

ли вы, хотите, чтобы ваш ремешок двигался непрерывно или только когда движется мышь? – Treycos

ответ

0

Вместо того, чтобы использовать sf::Transfomable класс, унаследованный от вашей фигуры, создайте sf::Transform для него и использовать rotate (float angle, const Vector2f &center)

Вы просто должны сохранять ваше положение мыши каждый раз, когда он перемещается в sf::Vector2f