Как переместить несколько изображений отдельно, используя движения мыши SFML?

Ниже мой код, который отображает два изображения в окне.

Теперь, перемещая мышь, оба изображения перемещаются вместе, но как мне получить к ним доступ отдельно?

int main()
{
// Let's setup a window
sf::RenderWindow window(sf::VideoMode(640, 480), "SFML ViewTransformation");

// Let's create the background image here, where everything initializes.
sf::Texture BackgroundTexture;
sf::Sprite bd;
sf::Vector2u TextureSize;  //Added to store texture size.
sf::Vector2u WindowSize;   //Added to store window size.

if(!BackgroundTexture.loadFromFile("bg1.jpg"))
{
return -1;
}
else
{
TextureSize = BackgroundTexture.getSize(); //Get size of texture.
WindowSize = window.getSize();             //Get size of window.

float ScaleX = (float) WindowSize.x / TextureSize.x;
float ScaleY = (float) WindowSize.y / TextureSize.y;     //Calculate scale.

bd.setTexture(BackgroundTexture);
bd.setScale(ScaleX, ScaleY);      //Set scale.
}
// Create something simple to draw
sf::Texture texture;
texture.loadFromFile("background.jpg");
sf::Sprite background(texture);
sf::Vector2f oldPos;
bool moving = false;

sf::View view = window.getDefaultView();

while (window.isOpen()) {
sf::Event event;
while (window.pollEvent(event)) {
switch (event.type) {
case sf::Event::Closed:
window.close();
break;
case sf::Event::MouseButtonPressed:
if (event.mouseButton.button == 0) {
moving = true;
oldPos = window.mapPixelToCoords(sf::Vector2i(event.mouseButton.x, event.mouseButton.y));
}
break;
case  sf::Event::MouseButtonReleased:

if (event.mouseButton.button == 0) {
moving = false;
}
break;
case sf::Event::MouseMoved:
{
if (!moving)
break;

const sf::Vector2f newPos = window.mapPixelToCoords(sf::Vector2i(event.mouseMove.x, event.mouseMove.y));

const sf::Vector2f deltaPos = oldPos - newPos;
view.setCenter(view.getCenter() + deltaPos);
window.setView(view);oldPos = window.mapPixelToCoords(sf::Vector2i(event.mouseMove.x, event.mouseMove.y));
break;
}
}
}

window.clear(sf::Color::White);
window.draw(bd);
window.draw(background);

window.display();
}
}

Также я хотел бы услышать предложения, где я мог бы найти такие примеры с надлежащим пониманием и хорошим объяснением. Заранее спасибо.

-1

Решение

Проблема в том, что вы перемещаете представление, а не сам спрайт:

view.setCenter(view.getCenter() + deltaPos);
window.setView(view);

Вместо этого вы должны переместить спрайт. Так что обменяйте две строки выше с этой строкой, и она должна работать

bd.setPosition(bd.getPosition() - deltaPos);
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]