- Código: Seleccionar todo
void CImagen::CfgAngulo(int angulo,int imagen)
{
repositorio[imagen]= rotozoomSurfaceXY(repositorio[imagen],angulo,1,-1,0);
}
¿Como deberia utilizarlo? esque los parametros no me quedan claros, solo los 2 primeros, gracias
void CImagen::CfgAngulo(int angulo,int imagen)
{
repositorio[imagen]= rotozoomSurfaceXY(repositorio[imagen],angulo,1,-1,0);
}
SDL_Surface * rotozoomSurfaceXY (SDL_Surface *src, double angle, double zoomx, double zoomy, int smooth);
void DrawSurface(SDL_Surface *src, int x, int y, float zoomx, float zoomy, float angle)
{
// Superficie temporal con las modificaciones correspondientes
SDL_Surface *tmp;
// Posición donde dibujaremos la superficie en pantalla
SDL_Rect pos={x, y, 0, 0};
// Creamos superficie rotada y/o escalada sin anti-aliasing
tmp=rotozoomSurfaceXY(src, angle, zoomx, zoomy, 0);
// Dibujamos en pantalla la nueva superficie
// Nota: screen es la variable que nos devolvió
// la función SDL_SetVideoMode
SDL_BlitSurface(tmp, NULL, screen, &pos);
// Eliminamos de la memoria la superficie temporal
SDL_FreeSurface(tmp);
}
pos.x -= (tmp->w - src->w) / 2;
pos.y -= (tmp->h - src->h) / 2;
void DrawSurface(SDL_Surface *src, int x, int y, float zoomx, float zoomy, float angle)
{
// Superficie temporal con las modificaciones correspondientes
SDL_Surface *tmp;
// Posición donde dibujaremos la superficie en pantalla
SDL_Rect pos={x, y, 0, 0};
// Creamos superficie rotada y/o escalada sin anti-aliasing
tmp=rotozoomSurfaceXY(src, angle, zoomx, zoomy, 0);
// Arreglo posición de la imagen ya que la rotación
// es con respecto al centro de la imagen
pos.x -= (tmp->w - src->w) / 2;
pos.y -= (tmp->h - src->h) / 2;
// Dibujamos en pantalla la nueva superficie
// Nota: screen es la variable que nos devolvió
// la función SDL_SetVideoMode
SDL_BlitSurface(tmp, NULL, screen, &pos);
// Eliminamos de la memoria la superficie temporal
SDL_FreeSurface(tmp);
}
if (evento.type== SDL_MOUSEMOTION)
avion.CfgAngulo(evento.motion.x,1);
bueno, ahora pretendo que el angulo de la imagen apunte hacia la posicion del
raton
#include <math.h>
#define PI 3.1415927
void dibujar_superficie_mirando_el_puntero(SDL_Surface * src, SDL_Surface * screen)
{
int x = 200; /* centro de la imagen a imprimir */
int y = 200; /* centro de la imagen a imprimir */
int mouse_x, mouse_y;
int distancia_x, distancia_y;
float angulo;
SDL_GetMouseState(&x, &y);
distancia_x = abs(mouse_x - x);
distancia_y = abs(mouse_y - y);
angulo = (atan2(-distancia_y, distancia_x) * 180) / PI;
DrawSurface(src, x, y, 1.0, 1.0, angulo);
}
SDL_GetMouseState(&mouse_x, &mouse_y);
distancia_x = mouse_x - cx;
distancia_y = mouse_y - cy;
angulo = (atan2(distancia_y, distancia_x) * 180) / PI;
distancia_x = mouse_x - cx;
distancia_y = mouse_y - cy;
// En este caso si utilizamos valor absoluto
if(abs(distancia_x) > ancho_imagen || abs(distancia_y) > alto_imagen)
{
angulo = (atan2(distancia_y, distancia_x) * 180) / PI;
}
if (evento.type == SDL_MOUSEMOTION)
{
// Obtenemos posición actual del mouse
int mouse_x=evento.motion.x;
int mouse_y=evento.motion.y;
// (cx, cy) coordenadas del centro de la imagen
int distancia_x = mouse_x - cx;
int distancia_y = mouse_y - cy;
// Si el puntero del mouse está fuera del área de la imagen
// obtenemos el ángulo entre los dos vectores
// ancho_imagen, alto_imagen dimensiones de la imagen
if(abs(distancia_x) > ancho_imagen || abs(distancia_y) > alto_imagen)
{
angulo = (atan2(distancia_y, distancia_x) * 180) / PI;
}
}
// Guardará la posición del mouse
int mouse_x, mouse_y;
// Obtenemos posición actual del mouse
SDL_GetMouseState(&mouse_x, &mouse_y);
// (cx, cy) coordenadas del centro de la imagen
int distancia_x = mouse_x - cx;
int distancia_y = mouse_y - cy;
// Si el puntero del mouse está fuera del área de la imagen
// obtenemos el ángulo entre los dos vectores
// ancho_imagen, alto_imagen dimensiones de la imagen
if(abs(distancia_x) > ancho_imagen || abs(distancia_y) > alto_imagen)
{
angulo = (atan2(distancia_y, distancia_x) * 180) / PI;
}
astut escribió:Muchas gracias, ¿y como hacer que la imagen valla hacia las coordenadas del raton?
// Guardará la posición del mouse
int mouse_x, mouse_y;
// Obtenemos posición actual del mouse
SDL_GetMouseState(&mouse_x, &mouse_y);
// (cx, cy) coordenadas del centro de la imagen
int distancia_x = mouse_x - cx;
int distancia_y = mouse_y - cy;
// Si el puntero del mouse está fuera del área de la imagen
// obtenemos el ángulo entre los dos vectores
// ancho_imagen, alto_imagen dimensiones de la imagen
if(abs(distancia_x) > ancho_imagen || abs(distancia_y) > alto_imagen)
{
angulo = (atan2(distancia_y, distancia_x) * 180) / PI;
mover_imagen=1; // la imagen se debe mover
}
else mover_imagen=0; // la imagen se detiene
// La imagen solo se mueve cuando el puntero del mouse está fuera
// del área de la imagen
if(mover_imagen)
{
if (speed <= 10) speed += 0.3;
}
// El movimiento de la imagen se detiene cuando llega a su objetivo
// es decir, el puntero del mouse se encuentra dentro del área de
// la imagen
else
{
speed=0;
}
// Calcula la coordenada x e y del vector velocidad
vel.x = speed * cos(angulo*PI/180);
vel.y = speed * sin(angulo*PI/180);
// Movemos la imagen
pos.x += vel.x;
pos.y += vel.y;
Volver a Sobre las bibliotecas multimedia
Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados