elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: (TUTORIAL) Aprende a emular Sentinel Dongle By Yapis


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [Consulta] SDL2 arreglar movimiento de ventana con click
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: [Consulta] SDL2 arreglar movimiento de ventana con click  (Leído 4,654 veces)
BloodSharp


Desconectado Desconectado

Mensajes: 812


¡ Hiperfoco !


Ver Perfil WWW
[Consulta] SDL2 arreglar movimiento de ventana con click
« en: 22 Febrero 2019, 21:57 pm »

Buenas gente del foro, tengo una consulta con SDL2 que ojalá algún gurú de esta librería sepa resolver... :-[

Estaba creando una ventana con renderizado en OpenGL y mi problema es que al mover la ventana manteniendo click produce un temblor en el movimiento demasiado extraño. Con WinAPI no tengo problema en mi código pero al portar esto a SDL2 (porque deseo crear la aplicación multiplataforma) produce esa sacudida extraña...



Código
  1.    // Main loop
  2.    bool bOpen = true;
  3.    while (bOpen)
  4.    {
  5.        SDL_Event event;
  6.        static bool bMouseClicked=false;
  7.        static int xMPos=0,yMPos=0;
  8.        while (SDL_PollEvent(&event))
  9.        {
  10.            if(event.type == SDL_MOUSEBUTTONDOWN)
  11.            {
  12.                if(event.button.button == SDL_BUTTON_LEFT)
  13.                {
  14.                    bMouseClicked=true;
  15.                    SDL_CaptureMouse(SDL_TRUE);
  16.                    SDL_GetMouseState(&xMPos,&yMPos);
  17.                }
  18.            }
  19.            if(event.type == SDL_MOUSEBUTTONUP)
  20.            {
  21.                if(event.button.button == SDL_BUTTON_LEFT)
  22.                {
  23.                    bMouseClicked=false;
  24.                    SDL_CaptureMouse(SDL_FALSE);
  25.                }
  26.            }
  27.            if(event.type == SDL_MOUSEMOTION)
  28.            {
  29.                int xPos,yPos,xMPosN,yMPosN;
  30.                if(bMouseClicked)
  31.                {
  32.                    SDL_GetWindowPosition(window,&xPos,&yPos);
  33.                    SDL_GetMouseState(&xMPosN,&yMPosN);
  34.                    xPos+=xMPosN-xMPos;
  35.                    yPos+=yMPosN-yMPos;
  36.                    SDL_SetWindowPosition(window,xPos,yPos);
  37.                    //SDL_FlushEvent(SDL_WINDOWEVENT_MOVED);
  38.                    //SDL_FlushEvents(SDL_WINDOWEVENT,SDL_SYSWMEVENT);
  39.                }
  40.            }
  41.            if (event.type == SDL_QUIT)
  42.                bOpen = false;
  43.        }


B#


En línea



srWhiteSkull


Desconectado Desconectado

Mensajes: 444



Ver Perfil WWW
Re: [Consulta] SDL2 arreglar movimiento de ventana con click
« Respuesta #1 en: 23 Febrero 2019, 17:02 pm »

...depura en esa parte, quizás tengas el problema ahí,
Código
  1. ...
  2.            if(event.type == SDL_MOUSEMOTION)
  3.            {
  4.                int xPos,yPos,xMPosN,yMPosN;
  5.                if(bMouseClicked)
  6.                {
  7.                    SDL_GetWindowPosition(window,&xPos,&yPos);
  8.                    SDL_GetMouseState(&xMPosN,&yMPosN);
  9.                    xPos+=xMPosN-xMPos; // Puede que sea por esta operación
  10.                    yPos+=yMPosN-yMPos; // Puede que sea por esta operación
  11.                    SDL_SetWindowPosition(window,xPos,yPos);
  12. ...

Si te funciona en otra plataforma entonces deberías crear una macro función que actúe en función de que plataforma por medio de las instrucciones condicionales de preprocesador #if etc...


En línea

BloodSharp


Desconectado Desconectado

Mensajes: 812


¡ Hiperfoco !


Ver Perfil WWW
Re: [Consulta] SDL2 arreglar movimiento de ventana con click
« Respuesta #2 en: 23 Febrero 2019, 20:47 pm »

Si te funciona en otra plataforma entonces deberías crear una macro función que actúe en función de que plataforma por medio de las instrucciones condicionales de preprocesador #if etc...

Hola, gracias por responder. He probado recién en Windows y funciona perfectamente sin realizar el temblor por lo que asumo el código está correcto. Por ahora probé unicamente en el escritorio de Deepin voy a probar en distintos, si ocurre el mismo problema en varios voy a reportar el error a los desarrolladores de Valve para que arreglen la librería (porque podré asumir que solamente ocurre en Linux).


B#
En línea



srWhiteSkull


Desconectado Desconectado

Mensajes: 444



Ver Perfil WWW
Re: [Consulta] SDL2 arreglar movimiento de ventana con click
« Respuesta #3 en: 23 Febrero 2019, 20:54 pm »

Pero depuraste para ver los valores que contienen esos variables? xMpos, xMposN, yMpos y yMposN, quizás simplemente haya que hacer un cambio en la operación porque trabaje de otra forma,
« Última modificación: 23 Febrero 2019, 23:14 pm por srWhiteSkull » En línea

BloodSharp


Desconectado Desconectado

Mensajes: 812


¡ Hiperfoco !


Ver Perfil WWW
Re: [Consulta] SDL2 arreglar movimiento de ventana con click
« Respuesta #4 en: 23 Febrero 2019, 21:52 pm »

Pero depuraste para ver los valores que contienen esos valores? xMpos, xMposN, yMpos y yMposN, quizás simplemente haya que hacer un cambio en la operación porque trabaje de otra forma.

En teoría no debería funcionar diferente, al menos con los resultados devuelto por la librería, dado a que es una librería multiplataforma que debería funcionar con los mismos parámetros de retorno en cualquier sistema.

Por otro lado, me fijé los valores y son correctos: (la ventana es de 400x150)



Probaré con KDE, ya probé con gnome y provoca el mismo resultado...


B#
En línea



CalgaryCorpus


Desconectado Desconectado

Mensajes: 323


Ver Perfil WWW
Re: [Consulta] SDL2 arreglar movimiento de ventana con click
« Respuesta #5 en: 23 Febrero 2019, 22:16 pm »

Que pasa si mueves la instruccion que toma la posicion de la ventana al momento donde se detecta el click del mouse?

osea

Código
  1. SDL_GetWindowPosition(window,&xPos,&yPos);

al interior del
Código
  1. if(event.button.button == SDL_BUTTON_LEFT)

?

(Eliminando donde ahora esta')
En línea

Aqui mi perfil en LinkedIn, invitame un cafe aqui
BloodSharp


Desconectado Desconectado

Mensajes: 812


¡ Hiperfoco !


Ver Perfil WWW
Re: [Consulta] SDL2 arreglar movimiento de ventana con click
« Respuesta #6 en: 23 Febrero 2019, 22:22 pm »

Que pasa si mueves la instruccion que toma la posicion de la ventana al momento donde se detecta el click del mouse? Al interior del
Código
  1. if(event.button.button == SDL_BUTTON_LEFT)

Pasa lo mismo, supongo que el problema real reside en SDL_SetWindowPosition de Linux...


B#
En línea



CalgaryCorpus


Desconectado Desconectado

Mensajes: 323


Ver Perfil WWW
Re: [Consulta] SDL2 arreglar movimiento de ventana con click
« Respuesta #7 en: 23 Febrero 2019, 22:31 pm »

En ese caso, tal vez funciona mejor asi?

Código
  1.    // Main loop
  2.    bool bOpen = true;
  3.    while (bOpen)
  4.    {
  5.        SDL_Event event;
  6.        static bool bMouseClicked=false;
  7.        int xPos, yPos;
  8.        static int xMPos=0,yMPos=0;
  9.        while (SDL_PollEvent(&event))
  10.        {
  11.            if(event.type == SDL_MOUSEBUTTONDOWN)
  12.            {
  13.                if(event.button.button == SDL_BUTTON_LEFT && !bMouseClicked)
  14.                {
  15.                    bMouseClicked=true;
  16.                    SDL_GetWindowPosition(window,&xPos,&yPos);
  17.                    SDL_CaptureMouse(SDL_TRUE);
  18.                    SDL_GetMouseState(&xMPos,&yMPos);
  19.                }
  20.            } else
  21.            if(event.type == SDL_MOUSEBUTTONUP)
  22.            {
  23.                if(event.button.button == SDL_BUTTON_LEFT)
  24.                {
  25.                    bMouseClicked=false;
  26.                    SDL_CaptureMouse(SDL_FALSE);
  27.                }
  28.            } else
  29.            if(event.type == SDL_MOUSEMOTION)
  30.            {
  31.                int xMPosN,yMPosN;
  32.                if(bMouseClicked)
  33.                {
  34.                    SDL_GetMouseState(&xMPosN,&yMPosN);
  35.                    xPos+=xMPosN-xMPos;
  36.                    yPos+=yMPosN-yMPos;
  37.                    SDL_SetWindowPosition(window,xPos,yPos);
  38.                }
  39.            } else
  40.            if (event.type == SDL_QUIT)
  41.                bOpen = false;
  42.        }
  43.  
« Última modificación: 23 Febrero 2019, 22:34 pm por CalgaryCorpus » En línea

Aqui mi perfil en LinkedIn, invitame un cafe aqui
BloodSharp


Desconectado Desconectado

Mensajes: 812


¡ Hiperfoco !


Ver Perfil WWW
Re: [Consulta] SDL2 arreglar movimiento de ventana con click
« Respuesta #8 en: 23 Febrero 2019, 22:47 pm »

En ese caso, tal vez funciona mejor asi?




B#
En línea



srWhiteSkull


Desconectado Desconectado

Mensajes: 444



Ver Perfil WWW
Re: [Consulta] SDL2 arreglar movimiento de ventana con click
« Respuesta #9 en: 23 Febrero 2019, 23:20 pm »

Al final funcionó a la manera de CalgaryCorpus. Claro al no hacer un else seguía detectando el evento de pulsado e interfería al mover con el ratón pulsado.

Entonces queda cerrado el tema.

Gracias CalgaryCorpus por tú colaboración  ;-)
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Consulta ScreenShot de una ventana web
Java
Pablo Videla 1 2,811 Último mensaje 9 Noviembre 2011, 22:27 pm
por Pablo Videla
Cerrar ventana popup o float al hacer click en su contenido
Desarrollo Web
maximilion69 7 13,315 Último mensaje 23 Junio 2012, 03:50 am
por ©rIsT0BÄl
Enviar click a ventana externa (de forma especial)
.NET (C#, VB.NET, ASP)
TomaSs 0 1,720 Último mensaje 25 Enero 2014, 14:04 pm
por TomaSs
[Consulta]Sensor de movimiento a pc?
Juegos y Consolas
vojok 1 2,373 Último mensaje 28 Diciembre 2015, 00:06 am
por robertofd1995
Hola mundo en SDL2
Programación C/C++
aguaenSDL 6 4,991 Último mensaje 14 Enero 2016, 16:15 pm
por 0xFer
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines