为什么ball1.boundingrect.center返回与ball2.boundingrect.center相同的值?

时间:2015-08-14 14:52:28

标签: c++ qt const bounding-box

我用圆圈编程物理模拟。

Ball.cpp代码:

Ball::Ball()
{    
    angle = 0;
    setRotation(angle);

    //set the speed
    speed = 5;


    double StartX = 720;
    double StartY = 80;


        StartX = (qrand() % 800);
        StartY = (qrand() % 400);

      radius = 40;

    setTransformOriginPoint(radius,radius);

    setPos (StartX,StartY);
}

QRectF Ball::boundingRect() const
{
    return QRect(0,0,2*radius,2*radius);
}

bool Ball:: circCollide(QList <QGraphicsItem *> items) {
    QPointF c1 = mapToParent(this->boundingRect().center());

    foreach (QGraphicsItem * t, items) {
        Ball * CastBall = dynamic_cast<Ball *>(t);
        if(CastBall)
        {
            QPointF t1 = mapToScene(CastBall->boundingRect().center());
            double distance = QLineF(c1,t1).length();


            double radius1 = this->boundingRect().width() / 2;
            double radius2 = CastBall->boundingRect().width() / 2;
            double radii = radius1 + radius2;

            if ( distance <= radii )
            {
            //    qDebug() << "true collision";
                return true;
            }
        }
    }
 //   qDebug() << "false collision";
    return false;
}

我遇到的问题是这个代码串总是返回两个对象的中心位置相同的值,(t1.x == c1.x,t1.y == c1.y)但是this == CastBall返回false,因此它不是同一个对象,它只是具有相同的boundingRect中心点坐标。

在调用此函数之前,坐标已经相等,并且对于我生成的所有3个对象,坐标已经相等,尽管这些集合的值总是不同。

首先我认为这是一个问题因为boundingRect被定义为const,所以我在我的类中创建了这个函数

QRectF Ball:: centerRect()
{
    return QRect(0,0,2*radius,2*radius);
}

并且刚刚用它替换了boundingRect的每次使用(因为我已经在方法中使用了它,所以没有问题),但它仍然为两个中心返回相同的值。

我真的在我的智慧结束这个,并希望找到一些帮助。

1 个答案:

答案 0 :(得分:1)

问题在于:边界矩形的中心未映射到球的坐标。以下陈述应该有效:

BasicNetwork.performRequest: Unexpected response code 200 for http://ads.mopub.com/m/ad?id=x
Native ad request failed.
com.mopub.volley.NetworkError
  at com.mopub.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:166)
  at com.mopub.volley.NetworkDispatcher.run(NetworkDispatcher.java:112)