Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C: Ohjelmointiongelma

tuomas11 [24.08.2008 14:15:18]

#

Anteeksi epäselvä otsikko, mutta en keksinyt muutakaan. Eli ongelmana on seuraava: Minä haluaisin tehdä ohjelman, joka lukee hiiren sijainnin alussa ja sekunnin päästä lukee sen uudelleen. Sitten ohjelman pitäisi laskea x-koordinaattien välinen muutos. Ongelmana on se, että ohjelmani laskee jatkuvasti x:ien väliseksi erotukseksi nollan. Koodini on seuraava:

while ( silmukassa == true)
     {
      SDL_PollEvent(&tapahtuma);
      nappi = SDL_GetKeyState(NULL);

      SDL_GetMouseState(&vanha_x, &vanha_y);
      sprintf(string, "%i", vanha_x);
      teksti = TTF_RenderText_Shaded(font, string, black, green);
      PiirraKuva(teksti, naytto, 200, 200);
      SDL_Flip(naytto);

      SDL_Delay(1000);                         // sekunnin odotuksen jälkeen otetaan uusi sijainti ylös

      SDL_GetMouseState(&uusi_x, &uusi_y);
      sprintf(string2, "%i", uusi_x);
      teksti2 = TTF_RenderText_Shaded(font, string2, black, green);
      PiirraKuva(teksti2, naytto, 400, 200);
      SDL_Flip(naytto);

      SDL_Delay(1000);                         // odotetaan sekunti

      dx = uusi_x - vanha_x;                  // lasketaan erotus, tämä siis on aina nolla
      sprintf(string3, "%i", dx);
      teksti3 = TTF_RenderText_Shaded(font, string3, black, green);
      PiirraKuva(teksti3, naytto, 700, 200);

      SDL_Delay(1000);
}

tgunner [24.08.2008 14:31:41]

#

SDL_Delay tekee ilmeisesti hallaa hiirelle tjsp.

Tällä onnistuin itse:

t = SDL_GetTicks() + 1000; /* sekunti edelle */
for (x1 = x2 = 0;;) {
    ...
    if (SDL_GetTicks() > t) {
        SDL_GetMouseState(&x1, &y1);
        printf("%i\n", abs(x2 - x1)); /* itseisarvo */
        x2 = x1;
        t = SDL_GetTicks() + 1000;
    }
    ...
}

vidar [24.08.2008 14:46:50]

#

Oletko varma, että vanha_x != uusi_x? Väittäisin, että tuo toinen SDL_GetMouseState() tarvitsee SDL_PumpEvents()in toimiakseen oikein. Lisäksi tekstien piirto näyttäisi vuotavan muistia.

tuomas11 [24.08.2008 16:57:17]

#

Vuotavan muistia? Tarkoitatko tuolla sitä, että en poista tekstien surfaceja. Ne on kyllä poistettu varsinaisessa ohjelmassa. Tuo ylläoleva koodi on vain pieni osa ohjelmaa.

Vastaus

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

Tietoa sivustosta