WinForm中如何实现同时按下多个按键?

时间:2022-10-16 16:15:53
比如说我做一个类似"雷电"的游戏,需要在移动的同时射击,需要实现向斜方向移动(按下两个方向键),要怎么实现?
高手们请教教,谢谢!

7 个解决方案

#1


SendKey("ABCDEFG{UP}{DOWN}");

#2


两个按键同时按下,属于一个同时的事件,例如你往右下走

(0,0)--------------(6,0)
    |  \
    |    \
    |      \
    |        \
    |         (3,-3) 
    |
    |
    |
(0,-6)

假设初始飞机的位置是:(0,0)

当你按住6秒“下”按键,飞机飞到的位置应该是(0,-6),X的位置为零,Y为负六
同样,当你按住6秒“下”按键,飞机飞到的位置应该是(6,0)

事实上,你看上图就知道,其实你按下右下两个按钮的时候,雷电飞机走到的位置应该是(3,-3),因为速度只是左右单独键的一半速度。

这样你就可以构建一个函数用来计算飞机在哪个键飞行的速度。

例如:右飞的位置 (S,0) = (X * 时间秒,0)

下飞的位置是 (0,S) = (0,-Y   * 时间秒)

右下飞的位置 (S1,S2) =(X * 时间秒/2 ,-Y   * 时间秒 /2)  每个都除以2

#3


但是我在按下(上,左)或(上右)或其他双键组合的时候,程序会不知道引发哪一个事件啊.也就是说,我根本不能捕获多个按键同时按下的情况啊.

#4


期待答案中。。

#5


如果是游戏 
你不用在意····
因为在UPDATE的时候是顺序结构的··
所以
if 按键==下 
{
  y=y+Speed;
}
if 按键==左
{
  x=x-Speed;
}
就可以实现了。。。因为是一帧一帧的更新的嘛 实际看不出来是先下再左的

#6


引用 5 楼 Deathsign 的回复:
如果是游戏 
你不用在意···· 
因为在UPDATE的时候是顺序结构的·· 
所以 
if 按键==下 

  y=y+Speed; 

if 按键==左 

  x=x-Speed; 

就可以实现了。。。因为是一帧一帧的更新的嘛 实际看不出来是先下再左的

同意

#7


那么如果我一直按住某个方向键不放呢?能不能激活其他的方向键?
我在编程论坛上提问的时后他们说要用多线程来实现……

#1


SendKey("ABCDEFG{UP}{DOWN}");

#2


两个按键同时按下,属于一个同时的事件,例如你往右下走

(0,0)--------------(6,0)
    |  \
    |    \
    |      \
    |        \
    |         (3,-3) 
    |
    |
    |
(0,-6)

假设初始飞机的位置是:(0,0)

当你按住6秒“下”按键,飞机飞到的位置应该是(0,-6),X的位置为零,Y为负六
同样,当你按住6秒“下”按键,飞机飞到的位置应该是(6,0)

事实上,你看上图就知道,其实你按下右下两个按钮的时候,雷电飞机走到的位置应该是(3,-3),因为速度只是左右单独键的一半速度。

这样你就可以构建一个函数用来计算飞机在哪个键飞行的速度。

例如:右飞的位置 (S,0) = (X * 时间秒,0)

下飞的位置是 (0,S) = (0,-Y   * 时间秒)

右下飞的位置 (S1,S2) =(X * 时间秒/2 ,-Y   * 时间秒 /2)  每个都除以2

#3


但是我在按下(上,左)或(上右)或其他双键组合的时候,程序会不知道引发哪一个事件啊.也就是说,我根本不能捕获多个按键同时按下的情况啊.

#4


期待答案中。。

#5


如果是游戏 
你不用在意····
因为在UPDATE的时候是顺序结构的··
所以
if 按键==下 
{
  y=y+Speed;
}
if 按键==左
{
  x=x-Speed;
}
就可以实现了。。。因为是一帧一帧的更新的嘛 实际看不出来是先下再左的

#6


引用 5 楼 Deathsign 的回复:
如果是游戏 
你不用在意···· 
因为在UPDATE的时候是顺序结构的·· 
所以 
if 按键==下 

  y=y+Speed; 

if 按键==左 

  x=x-Speed; 

就可以实现了。。。因为是一帧一帧的更新的嘛 实际看不出来是先下再左的

同意

#7


那么如果我一直按住某个方向键不放呢?能不能激活其他的方向键?
我在编程论坛上提问的时后他们说要用多线程来实现……