Eli varmasti kaikkien ylläriksi projekti on edennyt erittäin hyvälle mallille, mutta nyt kuitenkin lähtöni tekee omituisen nykäyksen.
Eli kun lähtö alkaa alkaa numero menemään 3..2..1.. tänäaikana voi pitää kaasun pohjassa ja kun lähtölähtee auto lähtee kiihtymään, mutta. Minullapa käy niin, mutta hieman omituisesti.
Yritys A: Pidin alusta asti lähtölaskennassa kaasun pohjassa (SDLK_UP) ja lähdön lähtiessä auto "nykähti, teleporttautu" heti seuraavaan kurviin täydessä vauhdissa.
Yritys B: Painelin varovasti kaasua 3 ja 2 kohdalla, jonka jälkeen päästin kokonaan pois ja kun lähtölaskenta päättyi odotin puoli sekunttia ja painoin kaasua. Nykäystä ei tapahtunut.
Yritys C:
Painoin tismalleen samaan aikaan kun lähtölaskennan 1 katosi kaasun pohjaan ja auto teki saman nykähdys, teleporttaus liikkeen kuin yrityksessä A
//main.cpp while (pelin_kello + ajan_muutos <= Game::sekunnit()) { pelin_kello += ajan_muutos; piirretty = false; if(Game::rooma==6) { if (Game::lahto_lahtee == false) { Game::Liikuta(Game::kiihtyy_oma, Game::max_nopeus_oma); Racer::AIsOhjaus(); } } }
//game.hpp //kilpailu huone else if (rooms == 6) { Tracks::Track_1 t = Tracks::NewTrackBlock(); piirra_kuva(Photos::tyhjenna, 0,0, false); piirra_kuva(Photos::track_1, 0,0, false); Photos::temp_oma = rotozoomSurface(Photos::car, rad2deg(auton_kulma_oma), 1, 1); Photos::temp_racer[0] = rotozoomSurface(Photos::car, rad2deg(auton_kulma_racer[0]), 1, 1); if (lahto_lahtee == true) { piirra_kuva(Photos::tyhjenna, 0,0, false); piirra_kuva(Photos::track_1, 0,0, false); piirra_kuva(Photos::temp_oma, x_oma, y_oma, true); piirra_kuva(Photos::temp_racer[0], Racers_x[0], Racers_y[0], true); DrawText(Tekstit::text_34, 400, 400); SDL_Flip(ruutu); piirra_kuva(Photos::tyhjenna, 0,0, false); piirra_kuva(Photos::track_1, 0,0, false); piirra_kuva(Photos::temp_oma, x_oma, y_oma, true); piirra_kuva(Photos::temp_racer[0], Racers_x[0], Racers_y[0], true); SDL_Delay(1000); DrawText(Tekstit::text_35, 400, 400); SDL_Flip(ruutu); piirra_kuva(Photos::tyhjenna, 0,0, false); piirra_kuva(Photos::track_1, 0,0, false); piirra_kuva(Photos::temp_oma, x_oma, y_oma, true); piirra_kuva(Photos::temp_racer[0], Racers_x[0], Racers_y[0], true); SDL_Delay(1000); DrawText(Tekstit::text_36, 400, 400); SDL_Flip(ruutu); SDL_Delay(500); lahto_lahtee=false; } std::vector<Fysiikka::RenkasVana>::iterator vanaa = RenkasVanat.begin(); while(vanaa != Game::RenkasVanat.end()){ piirra_kuva(Photos::musta_tapla, vanaa->x, vanaa->y, true); vanaa++; } piirra_kuva(Photos::temp_oma, x_oma, y_oma, true); piirra_kuva(Photos::temp_racer[0], Racers_x[0], Racers_y[0], true); piirra_kuva(Photos::piste, x_jana2, y_jana2, true); piirra_kuva(Photos::piste, x_jana3, y_jana3, true); SDL_FreeSurface(Photos::temp_oma); Uint8* nappi; nappi = SDL_GetKeyState(NULL); SDL_FreeSurface(Photos::temp_racer[0]); if(nappi[SDLK_p]) { rooma=5; } }
//game.hpp //Liikutus funktio if (nappi[SDLK_LEFT]) { if (nopeus_oma >= 0.01 && nopeus_oma <= 0.4999) { kulma_oma-=0.01; auton_kulma_oma+=0.01; } if (nopeus_oma >= 0.5 && nopeus_oma <= 0.9999) { kulma_oma-=0.02; auton_kulma_oma+=0.02; } if (nopeus_oma >= 1 && nopeus_oma <= 2) { kulma_oma-=0.04; auton_kulma_oma+=0.04; } if (nopeus_oma >= max_nopeus_oma - pito) { kulma_oma-=0.02; auton_kulma_oma+=0.02; Game::RenkasVanat.push_back(Fysiikka::RenkasVana(x_oma-std::sin(kulma_oma) * 10, y_oma+std::cos(kulma_oma) * 10)); Game::RenkasVanat.push_back(Fysiikka::RenkasVana(x_oma+std::sin(kulma_oma) * 10, y_oma-std::cos(kulma_oma) * 10)); } } if (nappi[SDLK_RIGHT]) { if (nopeus_oma >= 0.01 && nopeus_oma <= 0.4999) { kulma_oma+=0.01; auton_kulma_oma-=0.01; } if (nopeus_oma >= 0.5 && nopeus_oma <= 0.9999) { kulma_oma+=0.02; auton_kulma_oma-=0.02; } if (nopeus_oma >= 1 && nopeus_oma <= 2) { kulma_oma+=0.04; auton_kulma_oma-=0.04; } if (nopeus_oma >= max_nopeus_oma - pito) { kulma_oma+=0.02; auton_kulma_oma-=0.02; Game::RenkasVanat.push_back(Fysiikka::RenkasVana(x_oma-std::sin(kulma_oma) * 10, y_oma+std::cos(kulma_oma) * 10)); Game::RenkasVanat.push_back(Fysiikka::RenkasVana(x_oma+std::sin(kulma_oma) * 10, y_oma-std::cos(kulma_oma) * 10)); } } if (nappi[SDLK_DOWN]) { nopeus_oma-=0.05; } if (nappi[SDLK_UP]) { if (nopeus_oma <= max_nopeus_oma) { nopeus_oma+=kiihtyy_oma; //0.05 } } else { if (nopeus_oma >= 0.05) { nopeus_oma-=0.03; } else if (nopeus_oma <= 0.05) { nopeus_oma=0; } } x_oma+=std::cos(kulma_oma) * nopeus_oma; y_oma+=std::sin(kulma_oma) * nopeus_oma;
Vaikea tuosta koodista on mitään arvailla. Olennaisempi kohta olisi se lähtölaskenta ja sen sijainti suhteessa tuohon ensimmäiseen koodinpätkään. Kai nyt omankin järkesi pitäisi sanoa, ettei vika voi olla liikkumisessa tai varsinkaan piirtämisessä, jos kerran nämä toimivat lähdön jälkeen ihan hyvin.
Mutta kokeilepa kuitenkin tehdä niin, että lähtöhetkellä asetat muuttujaan pelin_kello nykyisen ajan (Game::sekunnit()). Jos tämä yllättäen auttaa, mieti tarkkaan, mikä alkuperäisessä koodissa on pielessä, ja korjaa se jotenkin fiksummin.
Ehkä se auto kiihdyttää jo kun on lähtölaskenta mutta ohjela ei näytä sitä näytöllä?
tee joko semmonen että se ei ennen sitä nro. 1:stä tottele näppäimistöä tai että kuolee jos painaa näppäimistöö ennen lähtölaskentaa.
loked kirjoitti:
kuolee jos painaa näppäimistöö ennen lähtölaskentaa.
Juuri näin, hardcorea pitää olla.
User137 kirjoitti:
loked kirjoitti:
kuolee jos painaa näppäimistöö ennen lähtölaskentaa.
Juuri näin, hardcorea pitää olla.
Nii meikä tietää :D
Aihe on jo aika vanha, joten et voi enää vastata siihen.