DirectInput获取键盘状态有两种方式:立即模式和缓冲模式.

其中立即模式可能存在连击捕获:即当你当下左方向键(DIK_LEFT),用GetDeviceState()获得键盘状态,再和0x80求与时,会捕获两次,因此要通过一个中间销此连击捕获状态,具体如下:

char buffer[256];

LPDIRECTINPUTDEVICE7 pDKB ;

void GetKeyState()

{

pDKB->GetDeviceState(sizeof(buffer),(LPVOID)&buffer) ;

 int news ;
 if (buffer[DIK_LEFT] & 0x80)
 {
  news = 1 ;

}

 else if (buffer[DIK_RIGHT] & 0x80)
 {
  news = 2 ;

}

 else if (buffer[DIK_DOWN] & 0x80)
 {
  news = 3 ;

}

else if (buffer[DIK_ESCAPE] & 0x80)
 {
  news = 4 ;
  ::PostQuitMessage(0) ;
 }
 else news = 0 ;
 if (news == new4ing)
 {
  if (new4ing)
  {
   new4 = 0 ;
  }
  else
  {
   new4 = news ;
   new4ing = news ;
  }
 }
 else
 {
  new4 = news ;
  new4ing = news ;
 }

}

在此函数之外再对相应的new4进行处理,即可避免连击捕获.否则 

if (buffer[DIK_LEFT] & 0x80)

{

//在此处理,会导致连击捕获

}

Posted on 2009-06-15 16:56  阳阳爸爸  阅读(1408)  评论(0编辑  收藏  举报