我在做一个飞机游戏,游戏同时响应多个消息,但我用keyDown来响应消息,代码如下:void CPlantGameView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) 
{
// TODO: Add your message handdler code here and/or call default
switch(nChar)
{
case VK_LEFT:
Drawplant(1);
break; case VK_RIGHT:
Drawplant(2);
break;    case VK_UP:
Drawplant(3);
break; case VK_DOWN:
Drawplant(4);
break; case 68:
DrawFire(1);
SetTimer(1,10,NULL);
break;
} CView::OnKeyDown(nChar, nRepCnt, nFlags);
}Drawplant是画飞机的函数
DrawFire是画炸弹的函数我在试验图片的时候,无法响应两个消息。例如,我一直按着左键,在移动的时候按D键响应炸弹,炸弹飞出,响应了D的消息。但我左键一直没有放开,但飞机却无法移动。这是为什么?
    是消息响应函数堵塞,还是MFC无法在处理一个消息后再处理另一个消息?

解决方案 »

  1.   

    OnKeyDown应该是在按下按键的时候触发的消息吧。你一直按着Left按键,应该也就是最初响应了OnKeyDown一次吧。
    我认为实现长按的功能的话,是不是用定时器来实现呀,当OnKeyDown的为Left的时候set timer,当OnKeyUp为Left的时候kill timer,然后在OnTimer里面实现长按的效果,你的里面就是实现你移动的功能。D键还是在OnKeyDown里面实现。
      

  2.   

    OnKeyDown一次你能响应一个按键消息
    你用什么做的游戏
    如果是DirectX可以考虑用DirectInput实现
      

  3.   

    首先要确定你的Drawplant()函数的绘制效率吧,要是Drawplant费时间的话,它本来就是会卡的。
    如果Drawplant比较快的话,你的定时器设的时间看看有没有问题,如果定时器的时间设得太长的话,也会有卡的问题。
      

  4.   

    我用的是MFC定时器,非常麻烦。不过还是解决了问题,是定时器设置时间的问题,太慢了导致了绘制效率的降低。