2012-08-12 117 views
0

我從奇趣科技Qt的教程學習Qt的這些日子,關於計算子彈的位置在this page源代碼我'困惑:混亂的源代碼CH11

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的陣列;所以1的高度將對應於數組的0索引。只是一個猜測。 – tbert 2012-08-12 07:54:09

+0

同意tbert:在不知道'height()'的返回值的語義的情況下,減去'1'可能不重要。 – wallyk 2012-08-12 07:55:46

回答

3

你有一個小窗口:

Widget

如果小部件的高度爲height,然後y == 0線是在widget的頂部和底部線有y == height - 1協調。所以,如果你想在小部件的底部顯示一個點,你應該將它設置爲y座標爲height - 1

顯然,他們使用小部件的底部作爲底層,所以子彈只能在這個層次之上或之上。

+0

我終於明白了!感謝一百萬,Lol4t0! – 2012-08-12 08:42:28