你想要的是看到一個較小(比如200像素)的窗口到更大的(比如500像素)的漸變。要做到這一點,你只需要根據窗口在整個漸變中的位置來計算四角色的顏色,然後繪製出來。 (所以不要考慮繪製整個背景,而是要弄清楚如何繪製所需的部分)。
由於您只是在兩種顏色(0和500之間)之間平穩移動,因此您根據窗口的位置在顏色之間進行「線性插值」(即直線估計)。 Libgdx通過lerp()
methods on Color
支持這一點。
假設窗口沿Y軸行進,這樣的事情應該給你想要的東西:
Color baseColor = lightBlue;
Color topColor = darkBlue;
int skyHeight = 500;
int windowHeight = 200;
int windowLocation = ...; // something betweeen 0 and skyHeight - windowHeight;
Color windowBottomColor = baseColor.copy().lerp(topColor, windowLocation/skyHeight);
Color windowTopColor = baseColor.copy().lerp(topColor, (windowLocation + windowHeight)/skyHeight);
現在windowBottomColor
和windowTopColor
應適合調用filledRect:
shapeRenderer.filledRect(x, y, width, height,
windowBottomColor, windowBottomColor, windowTopColor, windowTopColor);
注意「copy()」調用會爲每個調用創建一個新的Color對象,因此您可能需要優化它以避免分配。免責聲明:我還沒有試過這個代碼,所以它可能有一些愚蠢的錯誤,但希望它給你正確的想法。
非常感謝您的回答。它按照你的解釋工作。 – Consec 2014-12-09 20:50:55
至於避免每個gameloop創建新的顏色對象,我創建了緩存顏色的散列表。由於水平被細分爲塊,塊的頂部和底部的所有顏色都被保存。 – Consec 2014-12-09 21:38:44