gpt4 book ai didi

c++ - 碰撞检测无法正常工作

转载 作者:行者123 更新时间:2023-11-28 05:41:29 25 4
gpt4 key购买 nike

关于 Screen ,黄球接近黄弧并击中。每个圆弧(黑色、绿色和黄色是圆弧——不同的对象)。当球击中黄色弧线时的碰撞检测显示 3 个对象 - 3 个弧线,即使它只击中一个黄色弧线。

Circles (arcs) 中的一些代码(它继承自 QGraphicsItem)。 width是笔的宽度,所以碰撞是在圆弧的外边界上。

#include ball.h

QRectF Circle::boundingRect() const
{
QRectF rect( -radius, -radius, radius*2, radius*2);
return rect;
}

QPainterPath Circle::shape() const
{
QPainterPath path;
path.addEllipse(QRectF( -radius-width, -radius-width, (radius+width)*2, (radius+width)*2));
return path;
}

一些来自 ball 的代码(它继承自 QGraphicsObject),以及 paint() 中的碰撞检测。

QPainterPath Ball::shape() const
{
QPainterPath path;
path.addEllipse(boundingRect());
return path;
}

QRectF Ball::boundingRect() const
{
QRectF rect( -radius, -radius, radius*2, radius*2);
return rect;
}

void Ball::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
if (!scene()->collidingItems(this).isEmpty()) {
for (int y = 0; y<collidingItems().size(); y++)
qDebug () << collidingItems().at(y);
delete this;
}
}

我大概知道错在哪里了:在 Circle::shape() 中,路径是一个椭圆,但它应该是一个圆弧。我应该如何创建这样的路径:

 painter->drawArc(boundingRect(), startAngle, spanAngle);

最佳答案

您确定弧的边界框计算吗?

QRectF Circle::boundingRect() const
{
QRectF rect( -radius, -radius, radius*2, radius*2);
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
return rect;
}

也许应该是:

QRectF( -radius-width, -radius-width, (radius+width)*2, (radius+width)*2));

我无法查看图像,所以我在这里猜测。只需确保您计算的 arc 边界框没有超出实际需要的范围即可。

关于c++ - 碰撞检测无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37001721/

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