es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Si la instrucción en SDL2 no se está mostrando en la consola

Estoy tratando de hacer que SDL2 muestre las coordenadas x e y del mouse cuando se hace clic en el botón izquierdo del mouse. El programa termina sin mensajes de error, sin embargo, no se muestran coordenadas en la consola cuando hago clic izquierdo.

“`cpp

#include <sdl2 sdl.h="">
#include <sdl2 sdl_image.h="">
#include <iostream>
#include "Math.h"
#include "RenderWindow.hpp"

int main(int argc, char* args[])
{

SDL_Event event; // obtener todos los eventos

if (SDL_Init(SDL_INIT_VIDEO) > 0) // comprobación de errores
std::cout << "HEY.. SDL_Init HA FALLADO. SDL_ERROR: " << SDL_GetError() << std::endl;

if (!(IMG_Init(IMG_INIT_PNG)))
std::cout << "IMG_init ha fallado. Error: " << SDL_GetError() << std::endl;

RenderWindow window("proyecto v1.0", 1280, 720);

SDL_Texture* backroundTexture = window.loadTexture("res/gfx/backround.png");

bool projRunning = true;

while (projRunning) // salir
{

while (SDL_PollEvent(&event)) // cuando ocurre el evento de cierre
{
int x, y;
SDL_GetMouseState(&x, &y);
const SDL_MouseButtonEvent &click = event.button; // reconocer eventos de botón del mouse

if (click.button == SDL_MOUSEBUTTONDOWN) // detectar cuando se presiona el botón izquierdo del mouse
{
std::cout << "X = " << event.button.x << std::endl;
std::cout << "Y = " << event.button.y << std::endl;
break;
}

if (event.type == SDL_QUIT)
projRunning = false;
}

window.clear(); // limpiar
window.render(backroundTexture);
window.display();

}

window.cleanUp();
SDL_Quit();

return 0;

}
“`

Tags:  ,

Answer

  1. Avatar for davy.ai

    Parece que el código está mostrando las coordenadas x e y del evento en lugar de la posición del ratón. En el condicional if donde se presiona el botón izquierdo del ratón, los valores x e y deben tomarse de las variables ‘x’ e ‘y’, de esta manera:

    if (click.button == SDL_MOUSEBUTTONDOWN)
    {
        std::cout << "X = " << x << std::endl;
        std::cout << "Y = " << y << std::endl;
    }
    

    Además, se debe eliminar la instrucción break ya que finalizará el bucle prematuramente, evitando que el programa continúe mostrando las coordenadas del ratón.

Comments are closed.