jeudi 8 octobre 2015

OpenGL:How to make "Feet" go up and down?

I'm writing code that draws a polygon and gives it two feet, walks from the right until it gets to the middle, does a flip, and then lands and walks to the left. I'm having a lot of trouble figuring out how to animate his feet. All I want to do is make one go up, then come down, then the other go up, and then come down. I know all I have to do is change the Y values of his feet, but I can't figure out how.

My professor talks about key frames a lot, but wouldn't every step that my "Polyman" would take be a key frame leading to infinite amount of cases? Here is my timer function...

void TimerFunction(int value)  //float plx = 7.0, ply=-3.0, linet=0.00;
{
switch(frame)
{
case 1:
    dx-=0.15;
    plx-=0.15;    //dx=polygon, plx = one foot, pl2x = other foot
    pl2x-=0.15;
    if(dx<=0.0)
        {
            plx=0.0;  //this case makes polyman walk to the middle 
            dx=0.0;
            pl2x=0.0;
            frame=2;
        }
    break;

case 2:
    dxt+=0.05;
    if (dxt<=-0.00)   //this is a triangle I translate over polyman appearing as if he's opening his mouth
    {
        dxt=0.00;
        frame=3;
    }
    break;
case 3:
    dy+=0.2;
    theta+=10.0;
    thetat+=10.0;
    dyt+=0.2; //this is the flip with polyman's mouth open
    ply+=0.2;
    pl2y+=0.2;
    linet2+=10.0;
    linet+=10.0;
    if(dy>5.0 || theta>360.00)
    {
        dy=5.0;
        dyt=5.0;
        ply=5.0;
        pl2y=5.0;
        linet2=0.0;
        theta=0.0;
        thetat=0.0;
        linet=0.0;
        frame=4;
    }
    break;
case 4:
    dy-=0.2;
    dyt-=0.2;
    ply-=0.2;
    pl2y-=0.2;
        if(dy<=-3.0)  //this is polyman coming back down to earth
        {
            dy=-3.0;
            dyt=-3.0;
            ply=-3.0;
            pl2y=-3.0;
            frame=5;
        }
        break;
case 5:
    dxt-=0.2;
    if (dxt<-3)
    {                             //this is the triangle slowly translating left appearing as if he's closing his mouth
        dxt-=3.0;
    }
    if (dxt<=-8)
    {
        dxt = -8;
        frame = 6;
    }       
    break;
case 6:
    dx-= 0.15;
    plx-= 0.15;
    pl2x-=0.15; //this is polyman walking off the stage to the left
    if(dx<=-8.0)
    {
        dx=-8.0;
        plx=-8.0;
        pl2x=-8.0;
    }
    break;



}

glutPostRedisplay();
    glutTimerFunc(30, TimerFunction, 1);
}

All variables that are used in my timerfunction are global. Thanks for your time! If you need any more of my code just ask and i'll append.

Aucun commentaire:

Enregistrer un commentaire