Lua Academy · درس

التعامل مع الإدخال

استجب للمفاتيح والفأرة

الدرس 3 من 413 خطوة

التعامل مع الإدخال درس مجاني في 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
end

keyreleased

يُنفَّذ 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 يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. حلقة لعبة LOVE
  2. رسم الأشكال والصور
  3. التعامل مع الإدخال
  4. الحركة والتصادمات
← العودة إلى Lua Academy