Вопрос

Как я могу масштабировать спрайты в SDL?

Это было полезно?

Решение

SDL не обеспечивает функции масштабирования напрямую, но есть дополнительная библиотека под названием SDL_gfx который обеспечивает возможности вращения и масштабирования.Есть также еще одна библиотека под названием Sprig который обеспечивает аналогичные функции.

Другие советы

Вы можете масштабировать, если получаете спрайты из текстуры с помощью SDL_RenderCopy(), но я не могу гарантировать вам сглаживание.

С помощью функции SDL_RenderCopy() вы передаете 4 параметра:

  • указатель на средство рендеринга (где вы собираетесь визуализировать).
  • указатель на текстуру (где вы собираетесь получить спрайт).
  • указатель на исходный прямоугольник (область и положение, где вы получаете спрайт на текстуре).
  • и указатель на dest rect (область и положение в средстве визуализации, которое вы собираетесь нарисовать).

Вам следует изменить только целевой прямоугольник, например, если вы собираетесь визуализировать изображение размером 300 x 300 и хотите его масштабировать, ваш целевой прямоугольник должен иметь размер 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

Если вы используете СФМЛ вместо этого вы получаете очень похожий набор кроссплатформенных возможностей, но графика имеет аппаратное ускорение, а такие функции, как масштабирование и вращение, предоставляются бесплатно, как с точки зрения отсутствия дополнительных зависимостей, так и с точки зрения отсутствия заметного использования процессорного времени для работы.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top