Масштабирование спрайтов в SDL - PullRequest
6 голосов
/ 15 февраля 2010

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

Ответы [ 5 ]

9 голосов
/ 15 февраля 2010

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

1 голос
/ 24 июля 2017

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

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

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

Вам следует изменять только свой объект-приемник, как, например, если вы собираетесь визуализировать изображение размером 300 x 300 и вы хотите, чтобы оно масштабировалось, ваш объект назначения должен иметь размер 150 x 150 или 72 x 72 или любое другое значение, которое вы хотели шкала.

0 голосов
/ 06 декабря 2018

Решение от 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, и вы полностью отрисовываете текстуру ввода до места назначения.

0 голосов
/ 04 января 2017

Вы не предоставили никакого кода, поэтому я предполагаю, что вы используете текстуры и SDL_Renderer:

При использовании SDL_RenderCopy () текстура будет растянута, чтобы соответствовать целевому SDL_Rect, поэтому, если вы увеличите или уменьшите целевой SDL_Rect, вы можете выполнить простое масштабирование текстуры.

https://wiki.libsdl.org/SDL_RenderCopy

0 голосов
/ 16 февраля 2010

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

...