按住箭头键进行字符移动C#.Net问题所以简而言之,我只想在WPF应用程序中围绕一个Canvas对象移动一个矩形。我在这里有我的KeyDown事件功能。问题是,当我长按一个键时,它会反复捕捉此功能并搞砸我的矩形位置代码。我的理论/背后的逻辑:因为当你按下键盘上的键盘时它不会顺利移动(在浏览器的滚动条上测试,它开始,暂停,然后继续),我希望它在UITimer中启动一个表单来移动中的对象。然后当KeyUp事件发生时,计时器停止。publicvoidWindow_KeyDown(objectsender,KeyEventArgse){stringmsg;字符串keystr=e.Key.ToString();keykeyval=e.Key;switch(keystr){case"Down":Console.WriteLine("Case1");Display.Content="向下";foreach(Charactercharacterincreatures){//character.buttondown=true;character.Position("向下");}休息;案例“向上”:Console.WriteLine(“案例2”);Display.Content="向上";foreach(Charactercharacterincreatures){//character.buttondown=true;character.Position("向上");}休息;案例“左”:Console.WriteLine(“案例3”);Display.Content="左";foreach(Charactercharacterincreatures){//character.buttondown=true;character.Position("左");}休息;case"Right":Display.Content="Right";foreach(Charactercharacterincreatures){//character.buttondown=true;character.Position("右");}休息;}}publicvoidWindow_KeyUp(objectsender,KeyEventArgse){Display.Content="没有按键被按下。";foreach(字符ch生物中的角色){如果(e.Key==Key.Right){character.StopIt();}if(e.Key==Key.Left){character.StopIt();}if(e.Key==Key.Up){character.StopIt();}if(e.Key==Key.Down){character.StopIt();}}}如果你需要我的矩形类代码,我只会在按下右键时发布箭头键发生了什么:位置被称为publicvoidPosition(StringDirection){if(Direction=="Right"){tmr=新的System.Windows.Forms.Timer();tmr.Interval=this.waitTime;tmr.Tick+=newEventHandler(GoRight);tmr.开始();}}GoRight被调用:publicvoidGoRight(objectsender,System.EventArgse){if(xBackground.ActualWidth-CharacterWidth){goRight=false;tmr.停止();}}}最后,在KeyUp事件中调用StopIt:publicvoidStopIt(){tmr.Stop();向右走=真;向左走=真;上去=真;向下=真;我刚刚学习c#几个月,所以我试图让它相对简单,如果可能的话只使用.net任何帮助将不胜感激!!编辑::我的解决方案:我只是在我的开关盒周围做了一个while(flag)循环。然后我在案例中设置了flag=false。当按下UP键时,我再次将标志设置为true。伟大的。我假设您希望角色在初始KeyDown事件中移动。然后,在收到KeyUp事件之前,您希望忽略任何后续的KeyDown事件。因此,您可以通过检查e.IsRepeat来忽略后续的KeyDown事件,例如publicvoidWindow_KeyDown(objectsender,KeyEventArgse){if(e.IsRepeat)return;//其余代码...顺便说一句,滚动应用程序时观察到的不平滑移动是由于键盘重复延迟造成的。您可以在键盘属性中或通过http://msdn.microsoft.com/en-us/library/system.windows.systemparameters.keyboarddelay.aspx进行设置。我不太了解WPF告诉你发生了什么,尽管你可能对按钮/暂停的事情是正确的。这取决于WPF如何处理按键。我的猜测是它的工作方式与大多数Microsoft表单的工作方式相同;它有一个暂停,可防止您一次输入多个字符。可能有办法解决这个问题,但我不确定。我的意思是你应该使用专为游戏设计的东西。当我第一次尝试创建游戏时,我采用了与您正在做的类似的风格,但没有成功。您正在使用专为办公设计的办公软件,无法访问您需要的;至少不是没有战斗和变通办法。正如AlexBeisley对XNA的建议。不幸的是,它是一种死去的语言,只是最近才消失。它是用c#编写的,由Microsoft开发,功能强大到足以做你想做的事而不会让你大吃一惊,而且一旦你掌握了它的窍门就很容易使用。看到它被杀死是一种耻辱。如果你想折磨自己,那么我建议你尝试学习C++和DirectX的路线。这并不容易,您需要有耐心并完成多个教程(似乎没有一个能很好地解释任何内容)。DirectX和C++不会很快推出,因此如果您想学习长期语言,它们是一个安全的选择。以上就是C#学习教程:按住方向键移动字符C#.NetISSUES分享的全部内容,如果对大家有用还需要详细了解C#学习教程,希望大家多多关注——本文来自网络收集,不代表立场,如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
