Итак, я недавно начал заниматься программированием на SFML, и Мне нужна помощь в создании bool, который проверяет, сталкиваются ли два прямоугольника или перекрывают друг друга.
Это кодfar:
bool collision(sf::Rect rect, sf::Rect rect2){
if(rect.getGlobalBounds().intersects(rect2.getGlobalBounds())){
return true;
}
else{
return false;
}
}
Я получаю следующие ошибки:
- пропущены аргументы шаблона перед 'rect'
- пропущенаргументы шаблона перед 'rect2'
- ожидаемое первичное выражение до ')' токен
Я делаю платформер и не могу найти эффективный способ проверить столкновение между игрокоми мир, и я абсолютно презираю необходимость писать этот код снова и снова при написании операторов if, поэтому я хотел бы проверить, сталкиваются ли они, соприкасаются ли они, пересекаются ли все, что вы хотите, чтобы они назывались.
Я надеюсь сделать заявления if, подобные этому, или, по крайней мере, это то, что я имею в виду:
if(collision(rectangle1,rectangle2) == true){
std::cout << "collision" << std::endl;
}
Кстати, я используюКодовые блоки ide.
Я пытался найти помощь в Интернете, но не смог найти ничего, что решило бы мою конкретную проблему.Я считаю, что это связано с тем, что я использую SFML, но это не было подтверждено.
Я не думаю, что мне нужно включать остальную часть моего кода, так как моя проблема лежит здесь и нене связан ни с чем другим, поэтому я надеюсь, что вы можете обнаружить проблему здесь. Если вам необходимо, пожалуйста, не стесняйтесь спрашивать меня об остальной части моей программы.
Любая помощь приветствуется!:)
РЕДАКТИРОВАТЬ: Вот мой код:
#include <SFML/Graphics.hpp>
#include <SFML/Window/Keyboard.hpp>
#include <SFML/Graphics/Rect.hpp>
int main(){
sf::RenderWindow window(sf::VideoMode(800,600),"INSERT_WINDOW_TITLE", sf::Style::Titlebar | sf::Style::Close);
sf::RectangleShape rect1(sf::Vector2f(20.f,20.f));
rect1.setFillColor(sf::Color::Blue);
sf::RectangleShape rect2(sf::Vector2f(20.f,20.f));
rect2.setFillColor(sf::Color::Green);
bool collision(sf::FloatRect r1, sf::FloatRect r2)
{
return r1.intersects(r2, sf::FloatRect());
}
while(window.isOpen()){
sf::Event event;
while(window.pollEvent(event)){
if (event.type == sf::Event::Closed)
window.close();
}
if(sf::Keyboard::isKeyPressed(sf::KeyBoard::W) && collision(rect1,rect2) == false) rect1.move(0.f,-1.f);
if(sf::Keyboard::isKeyPressed(sf::KeyBoard::S) && collision(rect1,rect2) == false) rect1.move(0.f,1.f);
if(sf::Keyboard::isKeyPressed(sf::KeyBoard::A) && collision(rect1,rect2) == false) rect1.move(-1.f,0.f);
if(sf::Keyboard::isKeyPressed(sf::KeyBoard::D) && collision(rect1,rect2) == false) rect1.move(1.f,0.f);
window.draw(rect1);
window.draw(rect2);
window.display();
}
}