回 帖 发 新 帖 刷新版面

主题:[讨论]关于小游戏中OnKeyDown的问题

目的很简单,通过上下左右方向键,控制小人的走动,使用的是贴图的方式,程序一切正常,只是有一个问题:当一直按住某一方向键不放时小人可以连续顺畅的移动,此时突然改变方向,也是按住不放,小人总要顿一下,再开始流畅的移动。
  感觉应该是判断按键是否连续按住的原因,只是不知道怎么可以解决这一个“迟钝”的问题。
  部分代码:
void CGameDebugView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) 
{
// TODO: Add your message handler code here and/or call default
int ret;

if(nChar==38)
    ret=ex_hero.Move(UP);
else
    if (nChar==40)
       ret=ex_hero.Move(DOWN);
    else
       if (nChar==37)
      ret=ex_hero.Move(LEFT);
       else
    if (nChar==39)
       ret=ex_hero.Move(RIGHT);
}

回复列表 (共3个回复)

沙发

建议使用DirectInput,每次循环都获取所有健的状态,就不会有问题了

板凳

if(nChar==38)
    ret=ex_hero.Move(UP);
else
    if (nChar==40)
       ret=ex_hero.Move(DOWN);
    else
       if (nChar==37)
      ret=ex_hero.Move(LEFT);
       else
    if (nChar==39)
       ret=ex_hero.Move(RIGHT);

这么多???
为什么不用 swtich一次解决,速度上也比上面那一串if else if else....好得多...
swtich(nChar)
{
case:...
default:...
}

3 楼


这个确实,but that's not the point

我来回复

您尚未登录,请登录后再回复。点此登录或注册