游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3969|回复: 13

求教关于 连续按键的 解决办法

[复制链接]

20

主题

56

帖子

56

积分

注册会员

Rank: 2

积分
56
发表于 2008-4-8 15:45:00 | 显示全部楼层 |阅读模式
if(getKeyState('W')&0x8000)
{
   i+=10;
}

大概是个这样的问题,
当我 的 W按下后 I会不 停的 加10;
我想要的效果是按下只加一次,请问该怎么实现

20

主题

56

帖子

56

积分

注册会员

Rank: 2

积分
56
 楼主| 发表于 2008-4-8 16:49:00 | 显示全部楼层

Re:求教关于 连续按键的 解决办法

对了  我是 在一个 消息循环里做的
刚换成 DXINPUT貌似还是这样  
谁给我 个 好的 设计方法吧 谢谢

26

主题

125

帖子

125

积分

注册会员

Rank: 2

积分
125
发表于 2008-4-8 21:16:00 | 显示全部楼层

Re:求教关于 连续按键的 解决办法

我是这样做的让系统等待一秒钟、
Sleep(1000);
虽然可以解决楼主的问题,可是当你一直按着这个键的话就会卡住,我想应该还有更好的办法

16

主题

280

帖子

280

积分

中级会员

Rank: 3Rank: 3

积分
280
QQ
发表于 2008-4-8 21:23:00 | 显示全部楼层

Re:求教关于 连续按键的 解决办法

加个变量进行限制或使用按键弹开(555...)。

0

主题

769

帖子

1052

积分

金牌会员

Rank: 6Rank: 6

积分
1052
发表于 2008-4-8 21:50:00 | 显示全部楼层

Re:求教关于 连续按键的 解决办法

保存上一次按键状态
先判断有没变化
如果有变化了再进行事件处理
我没试过,觉得应该可以这么做

20

主题

56

帖子

56

积分

注册会员

Rank: 2

积分
56
 楼主| 发表于 2008-4-8 22:17:00 | 显示全部楼层

Re:求教关于 连续按键的 解决办法

想 来 应该是个 简单的 问题.感觉 就差异步.

保存上一次按键状态
先判断有没变化
如果有变化了再进行事件处理
我没试过,觉得应该可以这么做

------------------这样好像复杂化了  

86

主题

2251

帖子

2386

积分

金牌会员

Rank: 6Rank: 6

积分
2386
QQ
发表于 2008-4-8 22:49:00 | 显示全部楼层

Re:求教关于 连续按键的 解决办法

用队列,长度2就可以了
比如0是松开,1是按下
那么
10是按下
11是按住
01是抬起
00当然就是没有按啦~

20

主题

56

帖子

56

积分

注册会员

Rank: 2

积分
56
 楼主| 发表于 2008-4-9 16:08:00 | 显示全部楼层

Re:求教关于 连续按键的 解决办法

用队列,长度2就可以了
比如0是松开,1是按下
那么
10是按下
11是按住
01是抬起
00当然就是没有按啦~


-----如何检测是 按下 还是按住呢 ?能具体说说 吗  

17

主题

282

帖子

436

积分

中级会员

Rank: 3Rank: 3

积分
436
发表于 2008-4-9 18:25:00 | 显示全部楼层

Re:求教关于 连续按键的 解决办法

同意4F的方法

加一个变量来判断

86

主题

2251

帖子

2386

积分

金牌会员

Rank: 6Rank: 6

积分
2386
QQ
发表于 2008-4-9 22:01:00 | 显示全部楼层

Re:求教关于 连续按键的 解决办法

??用SDL???例子,????~

unsigned char _key_a_buf; //A?的?列

Uint8* keystates = SDL_GetKeyState(NULL);

/* 更新按??列 */
if( keystates[SDLK_a] ) {
    _key_a_buf= _key_a_buf << 1 | 1;
}else {
    _key_a_buf = _key_a_buf << 1;
}

#define _KEY_BIT_MASK 0x3
#define _KEY_DOWN 0x1
#define _KEY_PRESSING 0x3
#define _KEY_UP 0x2

bool is_keya_down() {
    if( (_key_a_buf&_KEY_BIT_MASK) == _KEY_DOWN ) {
        return true;
    }else {
        return false;
    }
}

bool is_keya_pressing() {
    if( (_key_a_buf&_KEY_BIT_MASK) == _KEY_PRESSING ) {
        return true;
    }else {
        return false;
    }
}

bool is_keya_up() {
    if( (_key_a_buf&_KEY_BIT_MASK) == _KEY_UP ) {
        return true;
    }else {
        return false;
    }
}

is_keya_down和is_keya_up都不怕主?所?的情?r。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-22 17:52

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表