2013-12-23 28 views
0

我想制作一个游戏,你是一个人,(是的,有引力),你在表单的底部。你可以左右移动(这是一个图片框),当你跳跃时,你往上走,然后再往下走。我想这样做,所以如果你按下右箭头键和空格键,你会跳到右边一点,和左边一样,但我不知道该怎么做。我试过了:当两个按键被按下时,在窗体上进行控制时,向上或向上或向上移动?

int pX = Player.Location.X; 
int pY = Player.Location.Y;  

if (e.KeyData == Keys.Space && e.KeyData == Keys.Right) 
{ 
         Player.Location = new Point(pX + 15, pY -= 30); 
         Thread.Sleep(50); 
         Player.Location = new Point(pX + 15, pY -= 30); 
         Thread.Sleep(50); 
         Player.Location = new Point(pX + 15, pY -= 30); 
         Thread.Sleep(50); 
         Player.Location = new Point(pX + 15, pY += 30); 
         Thread.Sleep(50); 
         Player.Location = new Point(pX + 15, pY += 30); 
         Thread.Sleep(50); 
         Player.Location = new Point(pX + 15, pY += 30); 
} 

但是没有奏效。谢谢你的帮助 !!

+0

你把什么活动呢? – 2013-12-23 20:55:17

+0

@Christmas独角兽我把它放在Form1中的keydown – user3105642

+0

确定'Form1'已经集中,并会挑keydown事件? – 2013-12-23 20:57:01

回答

0

除修饰键(如Alt,Ctrl,Shift)WinForms无法检测到同时按键。按除修饰键以外的两个键将触发不同的键事件。

这答案“捉在C#的WinForm按下多个按键”可以帮助您:https://stackoverflow.com/a/7780135/880990

像DirectInput的游戏界面有多个按键输入的支持。例如。您可以同时按下Up ArrowRight Arrow

您也可以尝试保持不同密钥的KeyUpKeyDown事件的trak以获取其状态。

另外,您最好使用Timer并在Tick事件处理程序中执行游戏逻辑。除了Sleep之外,这会给您一个真正的机会检测按下的同时按键,因为按键事件将在滴答声之间发生。

0

为了能够跟踪多个键被按下的与KeyDownKeyUp事件,你必须做一些手工追踪:

bool spacePressed, rightPressed; 

private void Form1_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.KeyData == Keys.Space) 
     spacePressed = true; 

    if (e.KeyData == Keys.Right) 
     rightPressed = true; 

    Console.WriteLine("Space: " + spacePressed + " Right: " + rightPressed); 
} 

private void Form1_KeyUp(object sender, KeyEventArgs e) 
{ 
    if (e.KeyData == Keys.Space) 
     spacePressed = false; 

    if (e.KeyData == Keys.Right) 
     rightPressed = false; 

    Console.WriteLine("Space: " + spacePressed + " Right: " + rightPressed); 
} 

e.KeyData将只持有单一的按键,并且不能使用布尔运算确定按下的键。

From MSDN

不要在此枚举使用值组合按位 操作。枚举中的值不是相互排斥的。

相关问题