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); }
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; } ... }
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.
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.
Aihe on jo aika vanha, joten et voi enää vastata siihen.