Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: SDL2 ei reagoi tapahtumiin

paju [28.12.2013 22:56:31]

#

Mikä mahtaa olla vialla? SDL2 ei reagoi hiiren tai näppäimistön tapahtumiin. Olen kokeillut eri vaihtoehtoja, mutta tuossa alla on tilanne tällä hetkellä.
Kielenä C++

#include <iostream>
#include <SDL2/SDL.h>
using namespace std;

int main(int argc, char** argv)
{
 bool isTrue = false;
 SDL_Event tapahtuma;

//Kunnes annetaan lopetuskäsky
 while(!SDL_QuitRequested())
 {
  //Odota tapahtumaa.
  SDL_WaitEvent(0);
  if (tapahtuma.type == SDL_MOUSEBUTTONDOWN)
  {
    //Jos painetaan vasenta hiiren näppäintä totuusarvo isTrue saa arvon true ja tulostetaan teksti "Toimii!".
   if (tapahtuma.button.button == SDL_BUTTON_LEFT)
   {
    isTrue = true;
    cout << "Toimii!" << endl;
   }
  }
 }
 return 0;
}

Hengilö [28.12.2013 23:30:14]

#

Pitäisköhän SDL2 alustaa ensin (suoraan putkan SDL2-oppaasta):

// Alustetaan kirjasto.
   if (SDL_Init(SDL_INIT_EVERYTHING) != 0) {
       fprintf(stderr, "Virhe: %s\n", SDL_GetError());
       exit(1);
   }

   // Asetetaan SDL_Quit suoritettavaksi ohjelman lopussa.
   atexit(SDL_Quit);

   // Luodaan 640x480-kokoinen ikkuna
   SDL_Window *ikkuna;
   SDL_Renderer *piirtaja;
   if (SDL_CreateWindowAndRenderer(640, 480, 0, &ikkuna, &piirtaja) != 0) {
       fprintf(stderr, "Virhe: %s\n", SDL_GetError());
       exit(2);
   }

   // Asetetaan ikkunalle otsikko.
   SDL_SetWindowTitle(ikkuna, "SDL2-kokeilu 1");

Edit: Jos muuten haluat tuon "Toimii!"-tekstin konsoliin käytä windowsissa lippua -mconsole, muuten teksti tulostuu stdout.txt-filuun.

paju [28.12.2013 23:40:21]

#

Juu, siis tuo koodinpätkä on vain osa koodia, alustuksen olen kyllä hoitanut. Ikkunankin olen luonut, mutta sillä ei varmaan ole vielä merkitystä. Kunhan saisi ensin reagoimaan noihin tapahtumiin.

SDL_Init(SDL_INIT_EVERYTHING);

if(SDL_Init(SDL_INIT_EVERYTHING)!=0)
 {
    cout << "Virhe SDL:n ominaisuuksien lataamisessa!" << endl;
    SDL_GetError();
    return -1;
 }

Hengilö [28.12.2013 23:42:21]

#

Onko sulla varsinaisessa koodissakin 2 kertaa SDL_Init? Ja tuosta GetErrorista ei ole oikein hyötyä kun sen paluuarvoa ei tulosteta.
Edit: Toi tapahtuma-muuttuja ei taida saada muuten missään vaiheessa uutta arvoa. Oikea muoto olisi SDL_WaitEvent(&tapahtuma);

paju [29.12.2013 00:30:40]

#

Muutin virheilmoitukset toimiviksi ja poistin toisen SDL_Init- lauseen sekä vaihdoin SDL_WaitEvent(0) muotoon SLD_WaitEvent(&tapahtuma), mutta mitään muutosta ei tapahtunut.

E: Se toimii! Ohjelma toimii nyt mitä tahansa näppäintä painamalla, ei sillä ole minulle väliä mitä painamalla se toimii, kunhan toimii. Hyvä kun huomautit noista minun virheilmoituksista ja tuosta WaitEventistä, kiitos siitä.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta