원하는 것은 더 작은 (예를 들어 200 픽셀) 창을 더 큰 (예 : 500 픽셀) 그라데이션으로 보는 것입니다. 이를 위해서는 전체 그라데이션에서 창의 위치에 따라 네 모서리 색상의 색상을 계산 한 다음 그려야합니다. (배경 전체를 그리는 것이 아니라 원하는 부분 만 그리는 방법을 생각해보십시오.)
2 가지 색상 (0과 500 사이)을 부드럽게 움직이기 때문에, Window가있는 곳을 기준으로 색상 사이의 "직선 보간"(즉, 직선 추정)을 수행합니다. 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
각 gameloop에 새로운 색상 객체가 생성되는 것을 피하기 위해 캐시 된 색상으로 해시 맵을 만들었습니다. 레벨은 블록으로 세분화되므로 블록의 상단과 하단에있는 모든 색상이 저장됩니다. – Consec