在坦克大战游戏中,OnKeyDown函数中,通过
switch(nChar)
{
    case UP:
      MoveUp();
      break;
    case RIGHT:
      MoveRight();
      break;
...//等等
}但是按键下去后游戏中的坦克总是要迟缓一下才会动,我玩的别人的游戏时候是按下后马上就移动了,不知道是为什么
请指教

解决方案 »

  1.   

    别人不是用onkeydown函数中处理的。
      

  2.   

    他们应该都用DirectX和DirectInput之类的
      

  3.   

    不用DirectInput难道就没有办法了吗
      

  4.   

    用OnKeyDown是慢一些,但不会慢到让人感觉迟缓,是你程序其它部分慢吧?
      

  5.   

    你现在是不是每收到一次OnKeyDown才让坦克动一下?
    如果是这样,坦克会先动一下,然后停顿一下,再连续动。你改一下程序KEYDOWN时启动一个定时器,(如果已启动则跳过),定时例程中控制坦克移动;KEYUP时停止定时器。这样就没问题了。
      

  6.   

    OnKeyDown是采用消息映射机制,肯定会慢的,但如同4楼所说,不会慢到能感觉到迟缓的地步。用定时器的方法不错,建议你可以试试。
      

  7.   

    听说俄罗斯方块也有这个问题。按键会产生很多KEYDOWN和KEYUP消息,消息队列装满后,后面的会被废弃,这些漏掉的是造成卡的原因。其实太多的按键消息重复处理很浪费,其实在人的感官能够感觉到的周期已内的频率处理一个消息,而其他废弃就可以了。1)可以在消息循环中检测看是否是方向键消息,如果是,就清空消息队列再dispathmassage。
    2)可以设一个timer,每次处理就是置bDelelteMassageFlag为fault 。在消息循环中,每当getmassage后检测bDelelteMassageFlag,如果为true清除消息队列中的按键消息,如果为fault就不作为。在winproc中每当处理一个方向键消息之后,都要将bDelelteMassageFlag置为true 。