如何判断按键是否为按住状态?

灼眼的超哥 2011-08-14 10:48:40
如题,C语言的,系统是linux系统。

写个游戏,用键盘控制,windows下的getch()函数和kbhit()函数已经模拟实现。

可是,怎么判断我是否按住某个键?

比如:我按住右键,小人往右走,松开按键后,小人停止走动。
...全文
1120 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
swimming 2012-03-09
  • 打赏
  • 举报
回复
晕 和楼主一样 求子代码
灼眼的超哥 2011-08-15
  • 打赏
  • 举报
回复
难道没人会?还是这个问题太简单,懒得打字???
灼眼的超哥 2011-08-15
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 bokutake 的回复:]

ncurses里可以用keypad()功能启用功能键,用getwch()就可以读到方向键等。

如果不用curses/ncurses,也可以通过ioctl切换键盘模式到K_RAW或K_MEDIUMRAW模式,就能直接获得键盘扫描码了。
http://hi.baidu.com/waiwai75/blog/item/05066f42efe5ba189313c63b.html
ncurses的……
[/Quote]
找到了这个:
http://blog.csdn.net/shark0001/article/details/2638187
灼眼的超哥 2011-08-14
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 jernymy 的回复:]

引用 4 楼 gsy999 的回复:
引用楼主 liuchao35758600 的回复:
如题,C语言的,系统是linux系统。

写个游戏,用键盘控制,windows下的getch()函数和kbhit()函数已经模拟实现。

可是,怎么判断我是否按住某个键?

比如:我按住右键,小人往右走,松开按键后,小人停止走动。

#define KEY_DOWN(vk_code) (……
[/Quote]
消息模式?怎么实现?
jernymy 2011-08-14
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 gsy999 的回复:]
引用楼主 liuchao35758600 的回复:
如题,C语言的,系统是linux系统。

写个游戏,用键盘控制,windows下的getch()函数和kbhit()函数已经模拟实现。

可是,怎么判断我是否按住某个键?

比如:我按住右键,小人往右走,松开按键后,小人停止走动。

#define KEY_DOWN(vk_code) ((GetAsyncKeyState(vk_……
[/Quote]

消息模式比较好
jialejiahi 2011-08-14
  • 打赏
  • 举报
回复
linux做小游戏可以参考下curses库。
灼眼的超哥 2011-08-14
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 alweeq86 的回复:]

OnLButtonDown 走
OnLButtonUp 停
[/Quote]
这是哪里的函数?

gsy999 2011-08-14
  • 打赏
  • 举报
回复
[Quote=引用楼主 liuchao35758600 的回复:]
如题,C语言的,系统是linux系统。

写个游戏,用键盘控制,windows下的getch()函数和kbhit()函数已经模拟实现。

可是,怎么判断我是否按住某个键?

比如:我按住右键,小人往右走,松开按键后,小人停止走动。
[/Quote]
#define KEY_DOWN(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 1 : 0)
#define KEY_UP(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 0 : 1)

if (KEY_DOWN(VK_ESCAPE) || KEY_DOWN(VK_SPACE))
PostMessage(main_window_handle, WM_DESTROY,0,0);

alweeq86 2011-08-14
  • 打赏
  • 举报
回复
OnLButtonDown 走
OnLButtonUp 停
灼眼的超哥 2011-08-14
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 tianmo2010 的回复:]

Linux下也可以用getchar()等,然后根据ASCLL码判断
[/Quote]
关键是如何判断我是一直按住按盘,还是只按一下按键。

如何检测按键被按下,以及检测按键是否释放?
tianmo2010 2011-08-14
  • 打赏
  • 举报
回复
Linux下也可以用getchar()等,然后根据ASCLL码判断
Jacky_Ben 2011-08-14
  • 打赏
  • 举报
回复
可以用等键来判断!
灼眼的超哥 2011-08-14
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 bokutake 的回复:]

抱歉,直接看这个就行了,不用ncurses
http://stackoverflow.com/questions/3962263/checking-if-a-key-was-pressed
[/Quote]
虽然现在用getch()函数和kbhit()函数实现了,但是,效果还没那么完美;

用kbhit()检测是否有按键输入;
有的话,执行相关语句,并且,开始计数;
之后,继续循环,当计数超过最大值后,kbhit()函数还没检测到按键再次输入,判断为该按键已释放;
相反,判断为该按键处于按住状态。
辰岡墨竹 2011-08-14
  • 打赏
  • 举报
回复
抱歉,直接看这个就行了,不用ncurses
http://stackoverflow.com/questions/3962263/checking-if-a-key-was-pressed
辰岡墨竹 2011-08-14
  • 打赏
  • 举报
回复
ncurses里可以用keypad()功能启用功能键,用getwch()就可以读到方向键等。

如果不用curses/ncurses,也可以通过ioctl切换键盘模式到K_RAW或K_MEDIUMRAW模式,就能直接获得键盘扫描码了。
http://hi.baidu.com/waiwai75/blog/item/05066f42efe5ba189313c63b.html
ncurses的详细教程是:http://tldp.org/HOWTO/NCURSES-Programming-HOWTO/index.html
一般来说K_MEDIUMRAW就足够了。
灼眼的超哥 2011-08-14
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 jernymy 的回复:]

引用 4 楼 gsy999 的回复:
引用楼主 liuchao35758600 的回复:
如题,C语言的,系统是linux系统。

写个游戏,用键盘控制,windows下的getch()函数和kbhit()函数已经模拟实现。

可是,怎么判断我是否按住某个键?

比如:我按住右键,小人往右走,松开按键后,小人停止走动。

#define KEY_DOWN(vk_code) (……
[/Quote]
怎么实现?
灼眼的超哥 2011-08-14
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 jialejiahi 的回复:]

linux做小游戏可以参考下curses库。
[/Quote]
是个通过famebuffer显示图形的图形游戏,图形倒是可以显示,现在就是按键控制的问题。

70,037

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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