سؤال

أنا نوع من كتابة محرك لعبة صغيرة - فقط لفهم كيف تعمل هذه من الداخل. لا أرغب حاليًا في العبث مع OpenGL أو DirectX ، لذلك أنا متمسك بالرسومات على عنصر تحكم مع GDI+ وجميع هذه الأشياء WinForms.

من الواضح أنني بحاجة إلى التعامل مع الإدخال. وبشكل أكثر تحديدا ، أحداث لوحة المفاتيح. هذا ، مع ذلك ، يمثل مشكلة:

protected override void OnKeyDown(KeyEventArgs e)
{
    Trace.WriteLine(string.Format("KD {0:hh:MM:ss.fff} {1}", 
        DateTime.Now, e.KeyCode));
}

هذا الرمز (حتى مع أقصر تأخير التكرار المحدد في تطبيق لوحة المفاتيح في لوحة التحكم) يلي ما يلي:

KD 10:02:18.318 Right
KD 10:02:18.570 Right
KD 10:02:18.598 Right
KD 10:02:18.639 Right
KD 10:02:18.667 Right
KD 10:02:18.701 Right

كما ترون ، هناك 0.25 ثانية. التأخير بين الحدثين الأولين. يؤدي هذا إلى حركات بطيئة للكائنات على الشاشة ، من الواضح: إنها تتحرك أولاً إلى اليمين ، ثم يتوقف مؤقتًا للحظة ملحوظة ، ثم يستمر.

كيف يمكنني حل هذه المشكلة؟ هل يمكن القيام بذلك في Winforms Pure أو هل يجب أن أذهب DirectInput (أو أيا كان طريق Kosher في الوقت الحاضر؟)؟

هل كانت مفيدة؟

المحلول

إن استخدام رسائل Windows ليس هو أفضل طريقة للتفاعل عن الإدخال.
لا أعرف شيئًا عن WinForms ، لكنني أفترض في الأحداث الرئيسية استخدام الرسائل.

لقد استخدمت DirectInput (V7) منذ عدة سنوات ، وكان سريعًا حقًا.
ربما GetKeyboardState أو getasynckeystate في حلقة اللعبة بدائل جيدة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top