Движение 2-го персонажа работает только в 1 направлении - PullRequest
0 голосов
/ 09 апреля 2011

Хорошо, моя проблема в том, что я работаю над 2D-игрой (например, Mario Bros.) ... и я застрял в движении персонажа, я реализовал ключи ... и получил простой квад для тестирования движения ... нона самом деле это не работает так, как я хочу.

, когда я нажимаю 'a', мой квадроцикл перемещается влево, когда я нажимаю 'w', мой квадроцикл перемещается вверх ... просто, но это работает, но если я нажимаю 'd 'мой квадроцикл просто не двигается вправо ... он просто как-то исчезает, хотя я сделал это так же, как левая клавиша ... и удалив левую клавишу, чтобы посмотреть, не влияет ли это на движение х

спасибо заранее .. надеюсь, у вас, ребята, есть идея ... я в замешательстве

- как я уже сказал ... другие клавиши работают ... но нажатие клавиши d не перемещает квад -- xpos - это GLfloat, я также пробовал float .. без изменений - нажатие d заставляет мой квад по какой-то причине исчезнуть


if (active){        
                            if (keys[VK_ESCAPE])
            {
                done=TRUE;
            }
            if (keys['W'])
            {
                if(!toggle)
                {
                ypos=ypos+1.0;
                toggle=1;
                }
            }
            if (!keys['W'])
                {
                    ypos=0.0;toggle=0;
                }
            if (keys['A'])
            {
                    t_key=1;
                    xpos1=xpos1-0.1f; 
            }                
            if (keys['D'])          
            {
                    t_key=0;
                    xpos2=xpos2-0.1f;
            }   
            else                        
            {
                DrawWorld();                
                DrawChar();
                SwapBuffers(hDC);
            }

}


int DrawChar(GLvoid){
glLoadIdentity();   // Reset The Current Modelview Matrix
GLfloat xtrans;
if(t_key){
    xtrans=xpos1;
    xpos2=xpos1;
}
else{
    xtrans=xpos2;
    xpos1=xpos2;
}
GLfloat ytrans=ypos;    
glTranslatef(0.0f,0.0f,-30.0f);     // move 5 units into the screen
glTranslatef(xtrans,ytrans,0.0f);
...

ЗАКЛЮЧЕНИЕ

если есть кто-то еще с такими же проблемами ... и он только прочитал несколько цитат Нехе вместо того, чтобы делать все урокиns .. (он использовал if только для escape, который работает) вот что вы, вероятно, ошиблись .. поместите функции рисования и swapbuffers вне else и удалите их .. иначе работать не будет

иСпасибо за быстрый ответ решение:

if (active){        
                        if (keys[VK_ESCAPE])
        {
            done=TRUE;
        }
        if (keys['W'])
        {
            if(!toggle)
            {
            ypos=ypos+1.0;
            toggle=1;
            }
        }
        if (!keys['W'])
            {
                ypos=0.0;toggle=0;
            }
        if (keys['A'])
        {
                t_key=1;
                xpos1=xpos1-0.1f; 
        }                
        if (keys['D'])          
        {
                t_key=0;
                xpos2=xpos2-0.1f;
        }
            DrawWorld();                
            DrawChar();
            SwapBuffers(hDC);

1 Ответ

2 голосов
/ 09 апреля 2011

Почему у вас есть такой код:

if (condition1) 
{
   instruction1
}
if (condition2)
{
   instruction2
} 
else 
{
   instruction3
}

Обратите внимание, что instruction3 будет выполняться, только если condition2 оценивается как false.В вашем случае condition2 - это keys['D'].Другими словами, если вы нажмете D, карта не будет обновлена.Может ли это быть проблемой?

...