在TrollTech的Qt教程Ch11中混淆源代码

时间:2012-08-12 07:49:37

标签: c++ qt qt4

我最近在TrollTech的Qt教程中学习Qt,我对this page中计算子弹位置的源代码感到困惑:

QRect CannonField::shotRect() const
{
    const double gravity = 4;

    double time = timerCount / 20.0;
    double velocity = shootForce;
    double radians = shootAngle * 3.14159265 / 180;

    double velx = velocity * cos(radians);
    double vely = velocity * sin(radians);
    double x0 = (barrelRect.right() + 5) * cos(radians);
    double y0 = (barrelRect.right() + 5) * sin(radians);
    double x = x0 + velx * time;
    double y = y0 + vely * time - 0.5 * gravity * time * time;

    QRect result(0, 0, 6, 6);
    result.moveCenter(QPoint(qRound(x), height() - 1 - qRound(y)));
    return result;
}

在倒数第三行:

result.moveCenter(QPoint(qRound(x), height() - 1 - qRound(y)));

我认为- 1是无稽之谈,不是吗?

1 个答案:

答案 0 :(得分:3)

你有一个小部件:

Widget

如果窗口小部件的高度为height,则y == 0行位于窗口小部件的顶部,底线为y == height - 1坐标。因此,如果您想在窗口小部件的底线显示一个点,则应将其y坐标设置为height - 1

显然,他们使用小部件的底部作为地面级别,因此子弹只能在此级别之上或之上。