Некорректное перемещение шара
Вот код
#include <SFML/Graphics.hpp>
using namespace sf;
int main()
{
RenderWindow window(VideoMode(360, 800), L"SFML", Style::Default);
window.setVerticalSyncEnabled(true);
CircleShape shape(100.f,50);
shape.setFillColor(Color::Red);
while (window.isOpen())
{
Event event;
Vector2i SPos = Touch::getPosition(1, window);
Vector2f TPos = static_cast<Vector2f>(SPos);
shape.setPosition(TPos.x, TPos.y);
while (window.pollEvent(event))
{
if (event.type == Event::Closed)
window.close();
}
window.clear();
window.draw(shape);
window.display();
}
return 0;
}
У меня сразу две проблемы. Во первых: шар перемещается не корректно, даже при преобразовании vec2i в vec2f. Некорректность проявляется в том, что для движения шара нужно сразу два пальца, и когда он двигается, он это делает быстрее моего пальца. Во вторых: SPos объявлен в бесконечном цикле, и при отпускании экрана, позиция шара сбрасывается. Мне нужно, что бы позиция запоминалась.
Ответы (2 шт):
Ну, во первых начнём с того, что ваш шар вообще не куда не двигается, это можно легко проверить используя функцию {sleep(milliseconds(500))} и таким образом следя за каждой итерацией. Во вторых что именно, конкретно, вы хотите сделать с этим шаром? Так же {TPos.x} и {TPos.y} возвращает нули.
Два пальца нужно оттого, что в коде берется позиция второго указателя. Не надо забывать, что индексы начинаются с 0. А чтобы позиция не сбрасывалась при отпускании следует выполнять перемещение только после проверки на нажатие.
unsigned int const pointer_index{0};
if (::sf::Touch::isDown(pointer_index))
{
::sf::Vector2i const pos{::sf::Touch::getPosition(pointer_index, window)};
shape.setPosition(static_cast<::sf::Vector2f>(pos));
}