문제

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를 더 크거나 작게 만드는 경우 간단한 텍스처 스케일링을 수행 할 수 있습니다.

https://wiki.libsdl.org/sdl_rendercopy

사용하는 경우 SFML 대신 매우 유사한 크로스 플랫폼 기능 세트를 얻을 수 있지만 그래픽은 하드웨어 가속화되며 스케일링 및 회전과 같은 기능은 추가 종속성이 필요하지 않고 눈에 띄는 CPU 시간이 작동하지 않는 측면에서 무료로 제공됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top