Я пытаюсь дублировать спрайты на экране, но я не могу сделать это без создания нескольких спрайтов.
Я обнаружил, что кто-то другой задает тот же вопрос, но я пытаюсь, например, щелкнуть где-нибудь в окне и заставить спрайт появиться там.Я пытался нарисовать этот спрайт в двух местах на экране (что сработало), но я также добавил столкновение для спрайта и спрайта игрока, что по какой-то причине не помешало игроку перейти в спрайт.
#include <SFML/Graphics.hpp>
#include <SFML/Window/Keyboard.hpp>
bool collision(sf::FloatRect r1, sf::FloatRect r2)
{
sf::FloatRect intersection;
return r1.intersects(r2, intersection);
}
bool collision(sf::Shape const & r1, sf::Shape const & r2)
{
return collision(r1.getGlobalBounds(), r2.getGlobalBounds());
}
int main(){
sf::RenderWindow window(sf::VideoMode(800,600),"INSERT_WINDOW_TITLE",
sf::Style::Titlebar | sf::Style::Close);
sf::RectangleShape player(sf::Vector2f(20.f,20.f));
player.setFillColor(sf::Color::Blue);
sf::RectangleShape rect(sf::Vector2f(20.f,20.f));
rect.setFillColor(sf::Color::Red);
int mousex = 400;
int mousey = 240;
rect.setPosition(400,240);
while(window.isOpen()){
sf::Event event;
if(collision(player,rect) == false){
if(sf::Keyboard::isKeyPressed(sf::Keyboard::W))
player.move(0.f,-1.f);
if(sf::Keyboard::isKeyPressed(sf::Keyboard::S))
player.move(0.f,1.f);
if(sf::Keyboard::isKeyPressed(sf::Keyboard::A))
player.move(-1.f,0.f);
if(sf::Keyboard::isKeyPressed(sf::Keyboard::D))
player.move(1.f,0.f);
}
if(sf::Mouse::isButtonPressed(sf::Mouse::Left)){
mousex = sf::Mouse::getPosition().x;
mousey = sf::Mouse::getPosition().y;
}
while(window.pollEvent(event)){
if (event.type == sf::Event::Closed)
window.close();
}
window.clear(sf::Color::Black);
window.draw(player);
rect.setPosition(400,240); // did not have any collision with this rect
window.draw(rect);
rect.setPosition(mousex,mousey); // I set this position after the
previous one, which is why it HAD collision
window.draw(rect);
window.display();
}
}
Как видите, я добавил комментарии, где произошла "ошибка".Проблема состоит в том, что только второй sf :: RectangleShape имел столкновение, и спрайт рисовался слишком быстро для любого реального столкновения (или, по крайней мере, это то, что я предполагаю).(Я думаю о дублировании спрайтов без дублирования кода 1000 раз) Как бы я решил эту проблему?