zoukankan      html  css  js  c++  java
  • 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,不然你会遇上传说中的线程访问窗体控件问题。祝好运。
    提问者评价
    感谢回答
    问了好多天了终于有个好心人出来了
  • 相关阅读:
    玩转----使用数据驱动ddt时,如何写测试报告2种方法
    玩转----svn--入门
    玩转----Selenium家族简介
    起名的含义
    重新开始
    学习django: 庄园漫步
    测试常用的表格
    【Kata Daily 190927】Counting sheep...(数绵羊)
    【Kata Daily 190924】Difference of Volumes of Cuboids(长方体的体积差)
    【Kata Daily 190923】Odder Than the Rest(找出奇数)
  • 原文地址:https://www.cnblogs.com/cfas/p/3164219.html
Copyright © 2011-2022 走看看