好的我的问题是: 我正在进行一场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);
答案 0 :(得分:2)
为什么你有这样的代码:
if (condition1)
{
instruction1
}
if (condition2)
{
instruction2
}
else
{
instruction3
}
请注意,只有instruction3
评估为condition2
时才会执行false
。在您的情况下,condition2
为keys['D']
。换句话说,如果按D
,地图将不会刷新。这可能是问题吗?