Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Lähtö "nykäisee"

mika132 [19.01.2011 00:12:21]

#

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;

Metabolix [19.01.2011 00:27:57]

#

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.

loked [19.01.2011 15:39:14]

#

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.

User137 [20.01.2011 11:04:49]

#

loked kirjoitti:

kuolee jos painaa näppäimistöö ennen lähtölaskentaa.

Juuri näin, hardcorea pitää olla.

loked [20.01.2011 15:39:13]

#

User137 kirjoitti:

loked kirjoitti:

kuolee jos painaa näppäimistöö ennen lähtölaskentaa.

Juuri näin, hardcorea pitää olla.

Nii meikä tietää :D

Vastaus

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

Tietoa sivustosta