【发布时间】:2019-04-27 13:10:59
【问题描述】:
所以我最近进入了 SFML 编程,我需要帮助创建一个布尔值来检查两个矩形是否发生碰撞或相互重叠。
这是目前的代码:
bool collision(sf::Rect rect, sf::Rect rect2){
return rect.getGlobalBounds().intersects(rect2.getGlobalBounds());
}
我收到以下错误:
- “rect”之前缺少模板参数
- “rect2”之前缺少模板参数
- ')' 标记之前的预期主表达式
我正在制作平台游戏,但找不到测试玩家与世界之间碰撞的有效方法。
这是我想为这个简单程序编写的代码:
if(collision(rectangle1,rectangle2)){
std::cout << "collision" << std::endl;
}
感谢任何帮助! :)
这是我的代码:
#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();
}
}
【问题讨论】:
-
sf::Rect是一个模板,所以你需要指定它保存的数据类型。例如sf::Rect<float>.