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;
}

最後から 3 行目:

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

- 1それはナンセンスだと思いますね。

4

1 に答える 1

3

あなたはウィジェットを持っています:

ウィジェット

ウィジェットの高さが の場合、heighty == 0はウィジェットの上にあり、下の線はy == height - 1座標です。したがって、ウィジェットの最下行に点を表示する場合は、y座標を に設定する必要がありますheight - 1

どうやら、彼らはウィジェットの底を地上レベルとして使用しているため、弾丸はこのレベルの上または上にのみ存在できます。

于 2012-08-12T08:32:39.690 に答える