gpt4 book ai didi

c++ - 使用 C++ 和 sfml 的简单碰撞问题

转载 作者:行者123 更新时间:2023-11-30 01:28:50 25 4
gpt4 key购买 nike

我编写了一个简单的程序,在屏幕上有两个立方体,一个用户可以移动,另一个是静止的。我刚开始使用 sfml,从未接触过碰撞,所以这对我来说是全新的。在我的代码中,我的目标是在用户将立方体引导到静止状态时弹出一个警告窗口。然而,问题是当我启动程序时警告窗口就会出现,即使它处于 if 循环中。这是我的代码:

    #include <SFML/Graphics.hpp>
#include <SFML/Window.hpp>
#include <iostream>

using namespace std;

bool isCollision(int x, int y, int x2, int y2){ // borrowed function, all credits go to whom ever made it
if (abs(x2 - x) > 20 || abs(y2 - y) > 20)
return false;
else
return true;
}

int main()
{
sf::RenderWindow App(sf::VideoMode(800, 600, 32), "My SFML Window");
sf::RenderWindow Warning(sf::VideoMode(400, 225, 32), "WARNING!");
sf::Shape Rect = sf::Shape::Rectangle(0, 0, 20, 20, sf::Color::Red);
sf::Shape Rect2 = sf::Shape::Rectangle(50, 0, 70, 20, sf::Color::Blue);


while (App.IsOpened())
{
sf::Event event;
while (App.GetEvent(event)) // I now know the shorter way to handle events, just haven't edited it yet. No functional difference
{
if (event.Type == sf::Event::Closed)
App.Close();
if ((event.Type == sf::Event::KeyPressed) && (event.Key.Code == sf::Key::Escape))
App.Close();
if ((event.Type == sf::Event::KeyPressed) && (event.Key.Code == sf::Key::Right))
Rect.Move(5.0, 0);
if ((event.Type == sf::Event::KeyPressed) && (event.Key.Code == sf::Key::Left))
Rect.Move(-5.0, 0);
if ((event.Type == sf::Event::KeyPressed) && (event.Key.Code == sf::Key::Down))
Rect.Move(0, 5.0);
if ((event.Type == sf::Event::KeyPressed) && (event.Key.Code == sf::Key::Up))
Rect.Move(0, -5.0);

}

int x = Rect.GetPosition().x;
int y = Rect.GetPosition().y;

int x2 = Rect2.GetPosition().x;
int y2 = Rect2.GetPosition().y;

isCollision(x, y, x2, y2);

if (isCollision(x, y, x2, y2) == true) // if loop that I am messing up somehow
}
Warning.Clear(sf::Color::White);

}

App.Clear();
App.Draw(Rect);
App.Draw(Rect2);
App.Display();
}

return EXIT_SUCCESS;
}

我从我正在观看的 tut 中获得了 bool isCollision 函数,但是 tut 是在快板中完成的,所以我尽可能地从它中删除。 (我使用他的函数的逻辑是我们的立方体大小完全相同,并且它们的属性相同[一个移动一个静止的]。我想问题一定在于我如何调用该函数。任何和所有的帮助都是很大的赞赏

最佳答案

在 C++ 中,由调用者收集返回值。

isCollision(x, y, x2, y2);

现在调用上面的函数,没有任何用处。您需要收集返回值并将其用作 if 条件的标志。或者直接将函数调用放在 if 条件本身中。

if ( isCollision(x, y, x2, y2) ){

// Code here
}

关于c++ - 使用 C++ 和 sfml 的简单碰撞问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6991613/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com