sprites de escala en SDL
-
20-09-2019 - |
Pregunta
¿Cómo puedo escalar sprites en SDL?
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.
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.