التعامل مع الإدخال
استجب للمفاتيح والفأرة
التعامل مع الإدخال درس مجاني في Lua Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Lua Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Lua Academy 4 دروس في المجموع.
طريقتان لقراءة الإدخال
يوفر LÖVE أسلوبين لقراءة الإدخال. يطرح الاستطلاع سؤالًا مثل «هل هذا المفتاح مضغوط الآن؟» في كل إطار، ولذلك فهو مناسب للإجراءات المستمرة مثل الحركة.
أما الأحداث فهي دوال رد نداء تُنفَّذ مرة واحدة عند حدوث شيء ما، مثل love.keypressed، ولذلك فهي مناسبة للإجراءات التي تُنفَّذ مرة واحدة مثل القفز أو إطلاق النار.
استطلاع لوحة المفاتيح
تعيد love.keyboard.isDown(key) القيمة true ما دام المفتاح مضغوطًا. استدعها داخل love.update للحصول على استجابة سلسة ومستمرة.
وبما أن التحقق يتم في كل إطار، فإن الاستمرار في الضغط على المفتاح يواصل تنفيذ الإجراء. وهذا هو الأسلوب الطبيعي لتحريك اللاعب.
function love.update(dt)
if love.keyboard.isDown('right') then
player.x = player.x + player.speed * dt
end
endالتحقق من مفاتيح متعددة
تقبل love.keyboard.isDown عدة مفاتيح في آن واحد، وتعيد القيمة true إذا كان أي منها مضغوطًا، مما يسهل إعداد ارتباطات بديلة.
يمكنك أيضًا إجراء عمليات تحقق منفصلة متسلسلة لمعالجة كل اتجاه بشكل مستقل، والحصول على حركة كاملة في الاتجاهات الأربعة.
function love.update(dt)
if love.keyboard.isDown('a', 'left') then
player.x = player.x - player.speed * dt
end
if love.keyboard.isDown('d', 'right') then
player.x = player.x + player.speed * dt
end
endحدث keypressed
يُنفَّذ love.keypressed(key) مرة واحدة بالضبط في اللحظة التي يُضغط فيها على مفتاح. استخدمه للإجراءات التي يجب ألا تتكرر أثناء استمرار الضغط، مثل القفز أو الإيقاف المؤقت.
يمرر المحرك اسم المفتاح كسلسلة نصية، لذا تقارن الأسماء مثل 'space' أو 'escape'.
function love.keypressed(key)
if key == 'space' then
player.jumping = true
end
endالخروج عند الضغط على Escape
من الأنماط الشائعة إغلاق اللعبة عندما يضغط اللاعب على Escape. يوقف love.event.quit المحرك بطريقة سليمة.
وبما أن keypressed يُنفَّذ مرة واحدة لكل ضغطة، فإن هذا يتجنب التفعيلات المتكررة غير المقصودة عند الاستمرار في الضغط على المفتاح.
function love.keypressed(key)
if key == 'escape' then
love.event.quit()
end
endkeyreleased
يُنفَّذ love.keyreleased(key) مرة واحدة عند إفلات مفتاح. ويتيح الجمع بينه وبين keypressed تتبع حالات الضغط بنفسك.
يفيد ذلك في آليات الشحن: ابدأ الشحن عند الضغط، ونفّذ الإطلاق عند الإفلات، مع قياس مدة الضغط على المفتاح.
function love.keypressed(key)
if key == 'space' then chargeStart = love.timer.getTime() end
end
function love.keyreleased(key)
if key == 'space' then power = love.timer.getTime() - chargeStart end
endموضع الفأرة
يعيد love.mouse.getPosition إحداثيي x وy الحاليين للمؤشر داخل love.update أو love.draw. ويمكنك أيضًا استخدام getX وgetY كلٌّ على حدة.
تتوافق الإحداثيات مع مساحة الرسم: الأصل في الزاوية العلوية اليسرى، وتزداد قيمة y نحو الأسفل.
function love.update(dt)
local mx, my = love.mouse.getPosition()
crosshair.x, crosshair.y = mx, my
endأزرار الفأرة
استطلع حالة الأزرار باستخدام love.mouse.isDown(1)، حيث يمثل 1 الزر الأيسر، و2 الزر الأيمن، و3 الزر الأوسط.
للنقرات المفردة، استخدم الحدث love.mousepressed(x, y, button)، الذي يُنفَّذ مرة واحدة ويمنحك إحداثيات النقرة مباشرة.
function love.mousepressed(x, y, button)
if button == 1 then
spawnAt(x, y)
end
endإدخال النص
عند الكتابة، يمرر love.textinput(text) الحرف الفعلي مع مراعاة تخطيط لوحة المفاتيح والمفاتيح المعدِّلة. وهذا أفضل من keypressed عند إنشاء حقول نصية.
استخدم keypressed إلى جانبه لمعالجة المفاتيح الخاصة مثل مسافة الحذف والإدخال، التي لا يرسلها textinput.
function love.textinput(t)
inputBuffer = inputBuffer .. t
endالجمع بين الاستطلاع والأحداث
تجمع الألعاب الحقيقية بين الأسلوبين: استطلع مفاتيح الحركة في كل إطار داخل love.update، بينما ضع الإجراءات التي تُنفَّذ مرة واحدة داخل دوال رد نداء الأحداث.
يساعد اختيار الأسلوب المناسب على تجنب الأخطاء. فاستطلاع القفز داخل update سينفذه في كل إطار ما دام المفتاح مضغوطًا، بينما ينفذه الحدث مرة واحدة كما هو مقصود.
function love.update(dt)
if love.keyboard.isDown('left') then player.x = player.x - 200*dt end
end
function love.keypressed(key)
if key == 'up' then jump() end
endأساسيات أذرع التحكم
يدعم LÖVE أيضًا وحدات التحكم من خلال واجهة joystick البرمجية. وتقرأ love.joystickpressed وisGamepadDown الخاصة بذراع التحكم حالة الأزرار.
تعيد العصي التناظرية قيمًا من -1 إلى 1 عبر getGamepadAxis، مما يتيح تحجيم الحركة بسلاسة، تمامًا كما يحدث عند استطلاع لوحة المفاتيح باستخدام dt.
function love.update(dt)
if joystick then
local ax = joystick:getGamepadAxis('leftx')
player.x = player.x + ax * player.speed * dt
end
endاختبار سريع
اختبر فهمك لمعالجة الإدخال في LÖVE.
مراجعة
يأتي الإدخال في LÖVE بأسلوبين: استخدم الاستطلاع عبر love.keyboard.isDown وlove.mouse.isDown للإجراءات المستمرة، واستجب لدوال رد نداء الأحداث مثل love.keypressed وlove.mousepressed للإجراءات التي تُنفَّذ مرة واحدة.
وتكمل ذلك واجهات برمجة الفأرة والنصوص وأذرع التحكم. ويساعد اختيار الأسلوب المناسب على إبقاء عناصر التحكم سريعة الاستجابة وخالية من الأخطاء.
تعلم Lua مع معلم ذكاء اصطناعي — مجانًا
اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.
- الدورات
- 40
- الدروس
- 159
الأسئلة الشائعة
هل درس «التعامل مع الإدخال» مجاني؟
نعم — نص درس «التعامل مع الإدخال» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Lua Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Lua Academy 4 دروس في المجموع.
ماذا ستتعلم في «التعامل مع الإدخال»؟
استجب للمفاتيح والفأرة تتمرن على Lua Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Lua Academy؟
لا تُشترط خبرة سابقة. Lua Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «التعامل مع الإدخال»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Lua Academy هذا؟
نعم. كل درس في Lua Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- حلقة لعبة LOVE
- رسم الأشكال والصور
- التعامل مع الإدخال
- الحركة والتصادمات