2d角色的移动仅在1个方向上起作用

时间:2011-04-09 17:32:29

标签: c++ opengl character move key

好的我的问题是: 我正在进行一场2D比赛(就像马里奥兄弟一样。)..而且我仍然坚持角色运动 我得到了按键实现..并得到一个简单的四边形测试运动..但它并没有真正按我想要的方式工作。

当我按'a'时我的四边形向左移动,当我按'w'时我的四边形向上移动..简单但是它有效 但是,如果我按'd'我的四边形只是不会向右移动..它只是以某种方式消失,虽然我已经完成它与左键相同..并删除左键,看它是否影响x运动没有不帮忙

提前感谢..希望你们有个主意......我很困惑

- 正如我所说..其他键工作..但按d不会移动四边形 - xpos是GLfloat,我也试过漂浮..没有变化 - 按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);
...

CONLUSION

如果有其他人有同样的问题..他只读了几个nehe的tuts而不是做所有的课程..(他只使用if for escape,哪个有效) 这可能是你错了..将绘制函数和swapbuffers放在else之外并删除它..否则将无法正常工作

和thnx的快速回答 溶液:

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 个答案:

答案 0 :(得分:2)

为什么你有这样的代码:

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

请注意,只有instruction3评估为condition2时才会执行false。在您的情况下,condition2keys['D']。换句话说,如果按D,地图将不会刷新。这可能是问题吗?