0

这些天我正在从 TrollTech 的 Qt 教程中学习 Qt,我对计算此页面中项目符号位置的源代码感到困惑:

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是胡说八道,不是吗?

4

1 回答 1

3

你有一个小部件:

小部件

如果小部件的高度是height,则y == 0线在小部件的顶部,底线有y == height - 1坐标。所以,如果你想在小部件的底线上显示一个点,你应该将它的y坐标设置为height - 1

显然,他们使用小部件的底部作为地面,所以子弹只能在这个水平之上或之上。

于 2012-08-12T08:32:39.690 回答