| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 517 人关注过本帖
标题:关于keystate函数的问题,我只按了一次左方向键,他就像按了几次一样
取消只看楼主 加入收藏
bok002121
Rank: 2
等 级:论坛游民
帖 子:90
专家分:26
注 册:2012-11-11
结帖率:87.5%
收藏
已结贴  问题点数:20 回复次数:4 
关于keystate函数的问题,我只按了一次左方向键,他就像按了几次一样


#define KEYDOWN(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000)? 1 : 0)  while(TRUE)
     {
         if(KEYDOWN(VK_LEFT))
              {
                  if(S[0].DIR==UP_DIR)
                  t.DIR=LEFT_DIR;             //上转左=左
                 else if(S[0].DIR==LEFT_DIR)
                  t.DIR=DOWN_DIR;              //左转左=下
                 else if(S[0].DIR==DOWN_DIR)
                 t.DIR=RIGHT_DIR;             //下转左=右
                 else
                  t.DIR=UP_DIR;                  //右转左=上            
              }
          else if(KEYDOWN(VK_RIGHT))
              {
                  if(S[0].DIR==UP_DIR)
                  t.DIR=RIGHT_DIR;         //上转右=右
                 else if(S[0].DIR==RIGHT_DIR)
                  t.DIR=DOWN_DIR;          //右转右=下
                 else if(S[0].DIR==DOWN_DIR)   
                  t.DIR=LEFT_DIR;             //下转右=左
                 else
                  t.DIR=UP_DIR;            //左转右=上     
              }
              else
              {
                  t.DIR=S[0].DIR;
                  delay(10);   
             }
              if(t.DIR==UP_DIR)
              {
                  t.y=S[0].y-2*SNAKE_D;
                  t.x=S[0].x;
                  for(i=len-1;i>0;i--)
                  S[i]=S[i-1];
                  S[i]=t;
                Draw_Snake(S,len);
                 delay(50);               
             }}
2013-07-25 09:54
bok002121
Rank: 2
等 级:论坛游民
帖 子:90
专家分:26
注 册:2012-11-11
收藏
得分:0 
回复 3楼 小xiong
不行,在一个瞬间,只存在按下和非按下两个状态........我在想,这样算不算缓存区里面一下积累了几个消息...用fflush(stdin)清楚又不行,用的是c-free5.0
2013-07-25 13:18
bok002121
Rank: 2
等 级:论坛游民
帖 子:90
专家分:26
注 册:2012-11-11
收藏
得分:0 
回复 2楼 yuccn
就是运行的时候,比如,我只按了一次转左,他却转了两次左
2013-07-25 13:20
bok002121
Rank: 2
等 级:论坛游民
帖 子:90
专家分:26
注 册:2012-11-11
收藏
得分:0 
想到原因了。KEYDOWN(vk_code)这个是判断某按键是否被按下,虽然你觉得自己只按了一下,但是,在按下去的那短短时间内,程序已经执行了好几遍了,所以会出现按一下跟按了好几次一样
2013-07-25 23:01
bok002121
Rank: 2
等 级:论坛游民
帖 子:90
专家分:26
注 册:2012-11-11
收藏
得分:0 
回复 3楼 小xiong
小弟愚昧,现在才想到你的意思
2013-07-26 08:11
快速回复:关于keystate函数的问题,我只按了一次左方向键,他就像按了几次一样
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016199 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved