OnKeyDown函数,一个键长按再按另外一个键怎样不被打断

Falleyes 2015-03-31 10:48:50
void CShipDlg::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
if (m_bGamePause)
return;

CMyShip* pShip = (CMyShip*)m_Objects.GetHead(); // remember that our ship is the first object in object list

//if (GetKeyState(VK_NUMPAD1) == 1){
// if (pShip->GetPos().x > 0)
// pShip->SetPos(pShip->GetPos().x - 5, pShip->GetPos().y);
//}
//else if (GetKeyState(VK_NUMPAD3) == 1) // turn right
//{
// if (pShip->GetPos().x < GAME_WIDTH - SHIP_WIDTH)
// pShip->SetPos(pShip->GetPos().x + 5, pShip->GetPos().y);
//}

if (nChar == VK_NUMPAD1) // turn left
{
if (pShip->GetPos().x > 0)
pShip->SetPos(pShip->GetPos().x - 5, pShip->GetPos().y);
}
else if (nChar == VK_NUMPAD3) // turn right
{
if (pShip->GetPos().x < GAME_WIDTH - SHIP_WIDTH)
pShip->SetPos(pShip->GetPos().x + 5, pShip->GetPos().y);
}
else
if (nChar == VK_SPACE){ //Throw a bomb
CObject* cp = m_Objects.GetHead();
//获得船的位置新建雷子并把雷子加入列表
m_BombList.AddTail(new CBomb(((CMyShip*)m_Objects.GetHead())->GetPos()));
}
//CDialogEx::OnKeyDown(nChar, nRepCnt, nFlags);
}

按照如上代码,按下小键盘数字键1会向左移动,按空格会投掷炸弹。
现在的问题是一直按1向左移动,同时放炸弹,发现船的移动会被打断。虽然1键是按下的,但船是停止的。
请问有什么办法可以解决?
...全文
217 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
zgl7903 2015-04-01
  • 打赏
  • 举报
回复
OnTimer 或 单独的线程 GetAsyncKeyState
Falleyes 2015-04-01
  • 打赏
  • 举报
回复
引用 6 楼 zgl7903 的回复:
OnTimer 或 单独的线程 GetAsyncKeyState
明白了,多谢!
12304108 2015-03-31
  • 打赏
  • 举报
回复
在CShipDlg仅有的一个消息队列执行船和雷的功能,队列只有一个,消息都得排队,所以就打断了。 可以试着做一个类控制船和雷,然后船和雷在各自的队列中执行消息。
jiht594 2015-03-31
  • 打赏
  • 举报
回复
引用 4 楼 jiht594 的回复:
记录 向左移动 这个状态怎么样? 状态不改就一直左移
好像逻辑变了 还是ontimer检测 这个键是否按下状态
jiht594 2015-03-31
  • 打赏
  • 举报
回复
记录 向左移动 这个状态怎么样? 状态不改就一直左移
Falleyes 2015-03-31
  • 打赏
  • 举报
回复
引用 2 楼 zgl7903 的回复:
用定时器检测
OnTimer?
zgl7903 2015-03-31
  • 打赏
  • 举报
回复
用定时器检测

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧