- 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 1 invitado