Форма SFML вращается бесконечно - PullRequest
2 голосов
/ 16 октября 2019

Я делаю роботизированную руку, которая перемещается по графику, но когда я пытаюсь повернуть фигуру с помощью клавиатуры, она вращается бесконечно: я хочу, чтобы она вращалась только один раз, когда я нажимаю стрелку вправо. Как я могу решить это?

Transform transform;    
while (window.isOpen())
{
    Event event;
    while (window.pollEvent(event))
    {
        if (event.type == Event::Closed)
            window.close();

    }
    if (event.type == Event::KeyPressed)
    {
        switch (event.key.code)
        {
        case Keyboard::Right:
            ang += 1;
        }
    }

    window.clear(Color::White);
    window.draw(braccio, transform);
    transform.rotate(ang, WIDTH / 2, HEIGHT / 2);
    window.draw(assi);
    window.display();
}

1 Ответ

3 голосов
/ 16 октября 2019

Прямо сейчас эта строка

transform.rotate(ang, WIDTH / 2, HEIGHT / 2);

вызывается в каждом кадре вашей программы, потому что он находится в основном цикле, который работает постоянно . Если вы хотите, чтобы это происходило только тогда, когда ваша игра обнаруживает какой-либо ввод, поместите его в опрос событий, например:

while (window.pollEvent(event))
{
    // Do your event handling in here, input, etc.

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

    // This event case should also be inside here.
    if (event.type == Event::KeyPressed)
    {
        switch (event.key.code)
        {
            case Keyboard::Right:
                ang += 1;
                transform.rotate(ang, WIDTH / 2, HEIGHT / 2); 
                break;
        }
    }
}

В противном случае ваша рука будет продолжать вращаться бесконечно.

РЕДАКТИРОВАТЬ:Спасибо @alseether за указание на то, что функция Transform::rotate добавляет угол к текущему повороту фигуры. Так что приращение ang каждый раз будет постепенно вращать фигуру все быстрее и быстрее ... Если вы не хотите, чтобы это происходило, просто установите ang на постоянное значение, и куб будет вращаться с постоянной скоростью.

...