C#_C++_SDK_WM_KEYDOWN人物卡顿延迟解决方法

提问者采纳
由Keydown和keyup事件组合,keyDown来判定按下,此时开始移动,KeyUp判定松开,这样可行否?
追问
这是我一开始的写法,但就是因为  键盘重复延迟  导致keydown后会有一下停顿
回答
我的意思是有一个在keydown事件中有一个bool量判定是否按下了某个键,比如W,之后作为这类程序应该始终有个线程循环检测按键与画面结果显示(或渲染),最简单的有一个timer,每过一定时间间隔检查一下按键,在keyup里设定bool为松开。这种写法并不靠键盘重复时间来移动,而是靠你的循环函数速度来移动:
全局函数:
 System.Timers.Timer timer1;
然后是有若干bool量:
bool pressW = false;
 
程序的构造函数里:
     timer1 = new System.Timers.Timer(20);
     timer1.Elapsed+=new System.Timers.ElapsedEventHandler(move);
     timer1.Start();
 
你的人物keyDown事件:
        private void someObject_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.W)
                pressW = true;
        }
KeyUP事件:
        private void someObject_KeyUp(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.W)
                pressW = false ;
        }
最后是移动函数:
       private void move(object sender, System.Timers.ElapsedEventArgs e)
        {         
            if(pressW)
            someObject.Location = new Point(someObject.Location.X, someObject.Location.Y - 1); 
        }

如果你控制的是窗体控件移动,也请使用窗体控件中的timer,不然你会遇上传说中的线程访问窗体控件问题。祝好运。
提问者评价
感谢回答
问了好多天了终于有个好心人出来了

 

posted @ 2013-07-01 03:50  方东信  阅读(903)  评论(0编辑  收藏  举报