网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
02月21日漏签0天
c++吧 关注:652,913贴子:2,117,959
  • 看贴

  • 图片

  • 吧主推荐

  • 游戏

  • 37回复贴,共1页
<<返回c++吧
>0< 加载中...

【提问向】两个键同时按下的一个问题

  • 只看楼主
  • 收藏

  • 回复
  • LZ傻了
  • |
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
想写个坦克大战,但是在按键上感觉有问题。我按住了方向键正在移动,如果这个时候我按下发射子弹键就会停止移动,如何实现在移动中发射子弹而不停下来?使用的图形库是ege,各位讨论一下呗


  • oO幻想FLyOo
  • &
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
通过按键来修改action开关如何?


2026-02-21 15:55:44
广告
不感兴趣
开通SVIP免广告
  • 蒙面侍卫
  • +
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
如果用单线程实现的话,可以这样:
用两个变量接收方向键和子弹键按下状态,然后在一个计时器里写如下代码(示意):
if(方向键==按下)移动飞机
if(子弹键==按下)发射子弹


  • 湮灭的历史
  • |
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
楼主,按键消息分down和up。


  • 蒙面侍卫
  • +
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
先设置一个计时器:两个键同时按下或者其中任意一个按下完全能够响应
VOID CALLBACK TimerProc (HWND hwnd, UINT message, UINT iTimerID, DWORD dwTime)
{
HDC hdc=GetDC(hwnd);
static int x=0,y=0;
// 得到按键状态
short s1=GetKeyState(VK_UP); // ↑
short s2=GetKeyState(VK_LEFT); // ←
// 向上箭头按下
if(HIWORD(s1))
//随便画点什么,以便检测,单按连续显示虚线
{ MoveToEx(hdc,(x+=5),(y+=5),NULL); LineTo (hdc,(x+=25),(y+=25));}
// 向左箭头按下
if(HIWORD(s2))
// 这个没用+=,单按会只在原地显示一个折线图片,同时按才能移动显示
{ LineTo(hdc,x+10,y+20); LineTo(hdc,x+10,y-20);}
// 同时按下弹了消息框
if(HIWORD(s1)&&HIWORD(s2))
::MessageBox(hwnd,TEXT(""),TEXT(""),0);
}



  • yjryym
  • +
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
做游戏就不要用窗口消息,要通过帧循环时时检测。
比如异步按键检测是GetAsyncKeyState(基于硬件中断),注意不要用楼上的GetKeyState(据说是基于消息的)。另外摇杆设备时时检测用joyGetPosEx(支持手柄和方向盘等)。


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 37回复贴,共1页
<<返回c++吧
分享到:
©2026 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示