Lua Academy · บทเรียน

จัดการข้อมูลนำเข้า

ตอบสนองต่อแป้นพิมพ์และเมาส์

บทเรียน 3 จาก 413 ขั้นตอน

จัดการข้อมูลนำเข้า เป็นบทเรียน Lua Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 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 ควบคู่กันเพื่อจัดการปุ่มพิเศษ เช่น backspace และ enter ซึ่ง 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 ยังรองรับตัวควบคุมผ่านส่วนติดต่อจอยสติ๊ก โดย 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 ด้วย AI tutor — ฟรี

เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป

คอร์ส
40
บทเรียน
159

คำถามที่พบบ่อย

บทเรียน “จัดการข้อมูลนำเข้า” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “จัดการข้อมูลนำเข้า” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Lua Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Lua Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “จัดการข้อมูลนำเข้า”

ตอบสนองต่อแป้นพิมพ์และเมาส์ คุณปฏิบัติ Lua Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Lua Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Lua Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน

บทเรียน “จัดการข้อมูลนำเข้า” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Lua Academy นี้ได้ไหม

ได้ บทเรียน Lua Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. ลูปเกมของ LOVE
  2. วาดรูปร่างและภาพ
  3. จัดการข้อมูลนำเข้า
  4. การเคลื่อนที่และการชน
← กลับไปที่ Lua Academy