gpt4 book ai didi

c++ - SFML 2.0 碰撞类

转载 作者:行者123 更新时间:2023-11-28 03:09:13 25 4
gpt4 key购买 nike

我一直在使用 sfml 2.0 库开发 snake 的 oop 版本,并且我有一个单独的类来处理碰撞。这是代码:

包含“collision.hpp”

bool sfc::Sprite::collision(sfc::Sprite sprite2) {
this->setBounds();
sprite2.setBounds();

if (top > sprite2.bottom || bottom < sprite2.top || left > sprite2.right || right < sprite2.left) {
return false;
}

return true;
}

void sfc::Sprite::colMove(sf::Vector2f &movement, sfc::Sprite sprite2) {
if (!this->collision(sprite2)) {
this->move(movement);
}
}

void sfc::Sprite::colMove(float x, float y, sfc::Sprite sprite2) {
if (!this->collision(sprite2)) {
this->move(x, y);
}
}

void sfc::Sprite::setBounds() {
top = this->getPosition().y;
bottom = this->getPosition().y + this->getTexture()->getSize().y;
left = this->getPosition().x;
right = this->getPosition().x + this->getTexture()->getSize().y;
}

唯一的问题是一旦发生碰撞事件, Sprite 就会在窗口生命周期的剩余时间内被卡住。我怎样才能得到它,以便在那次碰撞中它不会粘在那里。谢谢! ~迈克尔

编辑:我知道碰撞发生后不允许 Sprite 移动,但我不知道碰撞后阻止 Sprite 移动的任何其他方法。

最佳答案

你的问题是,一旦你的 Sprite 与你的 Sprite 2发生碰撞,它就不能再移动了。如果检测到碰撞,您可以尝试将运动恢复到之前的 x 和 y。或者检查您将要移动到的地方是否是空的。

 bool sfc::Sprite::collision(sfc::Sprite sprite2, float x, float y) {
this->setBounds();
sprite2.setBounds();

if (top > sprite2.bottom + y || bottom < sprite2.top - y || left > sprite2.right +x|| right < sprite2.left - y ) {
return false;
}

return true;
}

那是为了碰撞然后

void sfc::Sprite::colMove(float x, float y, sfc::Sprite sprite2) {
if (!this->collision(sprite2, x, y)) {
this->move(x, y);
}
}

注意:我记错了 sfml 使用的坐标系,所以检查 + 和 -

关于c++ - SFML 2.0 碰撞类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18939462/

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