Pregunta

¿Cómo puedo escalar sprites en SDL?

¿Fue útil?

Solución

SDL no proporciona funcionalidad de escalado directamente, pero hay una biblioteca adicional llamada SDL_gfx que proporciona rotación y capacidades de zoom. También ha otra biblioteca llamada puntilla que proporciona características similares.

Otros consejos

Puede hacer escala si está recibiendo los sprites de una textura con SDL_RenderCopy (), pero no puedo garantizar que el antialiasing.

Con la función SDL_RenderCopy () se pasa 4 params:

  • un puntero a un procesador (donde se va a renderize).
  • un puntero a una textura (en el que se va a obtener el sprite).
  • puntero a rect fuente (el área y la posición donde se obtiene el sprite en la textura).
  • y el puntero a dest rect (el área y la posición en el procesador que se va a dibujar).

Sólo debe modificar su rect dest como por ejemplo, si se va a dar una imagen de 300 x 300 y desea que escalar, su rect dest debe ser como 150 x 150 o 72 x 72 o cualquier valor que quería escala.

Solución de Ibrahim CS funciona.

Permítanme ampliar en la parte superior de esta solución y proporcionar el código. Otra cosa a tener en cuenta es para calcular la nueva posición (x, y) con la parte superior izquierda es el origen para hacer la textura de escala.

Lo hago como esto

// 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);

asuma que es texture SDL_Texture y renderer es SDL_Renderer, y que rinde completamente a partir de la textura de entrada de destino.

No ha proporcionado ningún código, así que voy a asumir que usted está utilizando texturas y una SDL_Renderer:

Cuando se utiliza SDL_RenderCopy () la textura se expande para ajustarse al SDL_Rect destino, por lo que si se hace el destino SDL_Rect mayor o menor puede realizar una sencilla escala de la textura.

https://wiki.libsdl.org/SDL_RenderCopy

Si utiliza SFML entonces se obtiene un conjunto muy similar de las capacidades de plataforma cruzada, pero el los gráficos son acelerados hardware y características tales como la escala y la rotación vienen de forma gratuita, tanto en términos de necesidad sin dependencias adicionales y en términos de tomar ningún tiempo de CPU perceptible para operar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top