SDL의 스케일링 스프라이트
-
20-09-2019 - |
문제
SDL에서 스프라이트를 어떻게 확장하려면?
해결책
SDL은 스케일링 기능을 직접 제공하지 않지만 SDL_GFX라는 추가 라이브러리 회전 및 축소 기능을 제공합니다. 또한 있습니다 Sprig라는 다른 도서관 비슷한 기능을 제공합니다.
다른 팁
sdl_rendercopy ()를 사용하여 질감에서 스프라이트를 얻는 경우 스케일링을 할 수 있지만 항아리아를 보장 할 수는 없습니다.
함수 sdl_rendercopy ()를 사용하면 4 개의 매개 변수를 전달합니다.
- 렌더러에 대한 포인터 (렌더링 할 곳).
- 텍스처에 대한 포인터 (스프라이트를 얻는 곳).
- 소스에 대한 포인터 (텍스처에서 스프라이트를 얻는 면적 및 위치).
- 그리고 Dest RECT (당신이 그릴 렌더러의 영역과 위치)에 대한 포인터.
예를 들어 이미지 300 x 300을 렌더링하고 스케일링을 원한다면 Dest rect는 150 x 150 또는 72 x 72 또는 스케일을 원하는 값이어야합니다.
Ibrahim CS의 솔루션.
이 솔루션 위에 확장하고 코드를 제공하겠습니다. 주목해야 할 또 다른 점은 왼쪽 상단으로 새로운 위치 (x, y)를 계산하는 것입니다.
나는 이렇게한다
// calculate new x and y
int new_x = (x + texture->w/2) - (texture->w/2 * new_scale);
int new_y = (y + texture->h/2) - (texture->h/2 * new_scale);
// form new destination rect
SDL_Rect dest_rect = { new_x, new_y, texture->w * scale, texture->h * scale };
// render
SDL_RenderCopy(renderer, texture, NULL, &dest_rect);
그것을 가정합니다 texture
~이다 SDL_Texture
, 그리고 renderer
~이다 SDL_Renderer
, 그리고 입력 텍스처에서 대상으로 완전히 렌더링합니다.
당신은 코드를 제공하지 않았으므로 텍스처와 sdl_renderer를 사용하고 있다고 가정합니다.
sdl_rendercopy ()를 사용하는 경우 대상 sdl_rect에 맞게 텍스처가 늘어나므로 대상 sdl_rect를 더 크거나 작게 만드는 경우 간단한 텍스처 스케일링을 수행 할 수 있습니다.
사용하는 경우 SFML 대신 매우 유사한 크로스 플랫폼 기능 세트를 얻을 수 있지만 그래픽은 하드웨어 가속화되며 스케일링 및 회전과 같은 기능은 추가 종속성이 필요하지 않고 눈에 띄는 CPU 시간이 작동하지 않는 측면에서 무료로 제공됩니다.