gpt4 book ai didi

c++ - SFML 边界框碰撞检测

转载 作者:太空狗 更新时间:2023-10-29 20:39:37 28 4
gpt4 key购买 nike

我正在尝试为我的第一个 SFML 项目编写一个非常基础的游戏。这是一个机器人,它有一个关节臂,只能用他的手来戳破气球。我遇到的问题是,在检查 pincer sprite 是否与 balloon sprite 相交时,它始终返回 true,无论气球或机器人钳子的位置如何。我正在使用变换来放置机器人 ARM 的各个部分,这就是我认为的问题所在,但我不知道为什么。我已经尝试在一个单独的程序中使用边界框碰撞,其中不使用转换并且它工作得很好。转换和检测代码如下。如果有人能向我解释这一点,我将不胜感激。我是 SFML 的新手,所以在这里为我的无知道歉!!

    sf::Transform trBody;
trBody.translate(sBodyPos);
/////////////////////////////////////////////////

sf::Transform trArm1;
trArm1.translate(sArm1Pos);

sf::Transform rotArm1;
rotArm1.rotate(sArm1Rot);

sf::Transform TR1 = trBody*trArm1*rotArm1;
/////////////////////////////////////////////////

sf::Transform trArm2;
trArm2.translate(sArm2Pos);

sf::Transform rotArm2;
rotArm2.rotate(sArm2Rot);

sf::Transform TR2 = TR1*trArm2*rotArm2;
/////////////////////////////////////////////////

sf::Transform trPincer1;
trPincer1.translate(sPincer1Pos);

sf::Transform TR3 = TR2*trPincer1;
/////////////////////////////////////////////////

sf::Transform trPincer2;
trPincer2.translate(sPincer2Pos);

sf::Transform TR4 = TR2*trPincer2;
/////////////////////////////////////////////////
sf::Transform trBalloon1;
trBalloon1.translate(sBalloon1Pos);

if (sPincer1.getGlobalBounds().intersects(sBalloon1.getGlobalBounds())){

cout << "Bang" << endl;
ballOneHit = true;

}

// Clear screen
app.clear();
app.draw(sArm2, TR2);
app.draw(sPincer1, TR3);
app.draw(sPincer2, TR4);
app.draw(sArm1, TR1);
app.draw(sBody, trBody);

if (ballOneHit == false){

app.draw(sBalloon1, trBalloon1);

}

// Update the window
app.display();

最佳答案

冒险猜测,我会说对象的旋转是罪魁祸首,因为旋转具有扩展对象边界的不幸效果。旋转后的边界矩形仍在屏幕确定的 x-y 平面内,但包含旋转后的对象。作为说明,请查看此图片中文本的全局边界框:

bounding box rotation

请注意,框围绕着对象,但不是您可能期望得到的原始边界框的旋转版本。用the tutorial on graphics transforms的话来说:

SFML entities can give you their bounding box. The bounding box is the minimal rectangle that contains the entity, with sides aligned on the X and Y axes.

要解决此问题,您可以尝试创建一个始终完全包含在对象可见部分内的矩形,然后将其用于命中检测而不是对象的边界框。

关于c++ - SFML 边界框碰撞检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27280264/

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