Lua Academy · Pelajaran

Menangani Masukan

Tanggapi tombol dan tetikus.

Pelajaran 3 dari 413 langkah

Menangani Masukan adalah pelajaran Lua Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Lua Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Lua Academy mencakup 4 pelajaran total.

Dua Cara Membaca Masukan

LÖVE menyediakan dua gaya masukan. Pemeriksaan berkala menanyakan "apakah tombol ini sedang ditekan?" pada setiap bingkai, sehingga ideal untuk tindakan berkelanjutan seperti bergerak.

Peristiwa adalah fungsi panggilan balik yang dijalankan sekali ketika sesuatu terjadi, seperti love.keypressed, sehingga ideal untuk tindakan satu kali seperti melompat atau menembak.

Memeriksa Papan Ketik Secara Berkala

love.keyboard.isDown(key) mengembalikan nilai true selama sebuah tombol ditekan. Panggil fungsi ini di dalam love.update untuk mendapatkan respons yang lancar dan berkelanjutan.

Karena diperiksa pada setiap bingkai, menahan tombol akan membuat tindakan terus berlangsung. Cara ini paling sesuai untuk menggerakkan pemain.

function love.update(dt)
  if love.keyboard.isDown('right') then
    player.x = player.x + player.speed * dt
  end
end

Memeriksa Beberapa Tombol

love.keyboard.isDown menerima beberapa tombol sekaligus dan mengembalikan nilai true jika salah satunya ditekan, sehingga praktis untuk pemetaan tombol alternatif.

Anda juga dapat merangkai pemeriksaan terpisah untuk menangani setiap arah secara mandiri dan mendapatkan gerakan empat arah sepenuhnya.

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

Peristiwa keypressed

love.keypressed(key) dijalankan tepat satu kali saat sebuah tombol mulai ditekan. Gunakan ini untuk tindakan yang tidak boleh berulang selama tombol ditahan, seperti melompat atau menjeda.

Mesin meneruskan nama tombol sebagai string, sehingga Anda membandingkannya dengan nama seperti 'space' atau 'escape'.

function love.keypressed(key)
  if key == 'space' then
    player.jumping = true
  end
end

Keluar dengan Escape

Pola yang umum adalah menutup permainan ketika pemain menekan Escape. love.event.quit mematikan mesin dengan bersih.

Karena keypressed dijalankan sekali setiap penekanan, cara ini mencegah pemicu berulang yang tidak disengaja saat tombol ditahan.

function love.keypressed(key)
  if key == 'escape' then
    love.event.quit()
  end
end

keyreleased

love.keyreleased(key) dijalankan sekali ketika sebuah tombol dilepaskan. Memasangkannya dengan keypressed memungkinkan Anda melacak sendiri status tombol yang sedang ditahan.

Ini berguna untuk mekanisme pengisian daya: mulai mengisi daya saat tombol ditekan, lepaskan tembakan saat tombol dilepas, dan ukur berapa lama tombol ditahan.

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

Posisi Tetikus

love.mouse.getPosition mengembalikan koordinat x dan y kursor saat ini di dalam love.update atau love.draw. Anda juga dapat menggunakan getX dan getY secara terpisah.

Koordinatnya sesuai dengan ruang penggambaran: titik asal berada di kiri atas, sedangkan y bertambah ke bawah.

function love.update(dt)
  local mx, my = love.mouse.getPosition()
  crosshair.x, crosshair.y = mx, my
end

Tombol Tetikus

Periksa tombol dengan love.mouse.isDown(1); angka 1 adalah tombol kiri, 2 tombol kanan, dan 3 tombol tengah.

Untuk klik tunggal, gunakan peristiwa love.mousepressed(x, y, button), yang dijalankan sekali dan langsung memberikan koordinat klik.

function love.mousepressed(x, y, button)
  if button == 1 then
    spawnAt(x, y)
  end
end

Masukan Teks

Untuk mengetik, love.textinput(text) memberikan karakter sebenarnya dengan mempertimbangkan tata letak dan tombol pengubah. Cara ini lebih baik daripada keypressed untuk membuat bidang teks.

Gunakan keypressed bersamanya untuk menangani tombol khusus seperti backspace dan enter yang tidak dikirim oleh textinput.

function love.textinput(t)
  inputBuffer = inputBuffer .. t
end

Menggabungkan Pemeriksaan Berkala dan Peristiwa

Permainan nyata memadukan kedua gaya tersebut: periksa tombol gerakan pada setiap bingkai di dalam love.update, sementara tindakan satu kali ditempatkan di fungsi panggilan balik peristiwa.

Memilih gaya yang tepat membantu menghindari galat. Memeriksa lompatan di dalam update akan menjalankannya pada setiap bingkai selama tombol ditahan; peristiwa hanya menjalankannya sekali, sesuai tujuan.

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

Dasar-Dasar Pengendali Permainan

LÖVE juga mendukung pengendali melalui antarmuka pemrograman joystick. love.joystickpressed dan isGamepadDown milik joystick digunakan untuk membaca tombol.

Tuas analog mengembalikan nilai dari -1 hingga 1 melalui getGamepadAxis, sehingga Anda dapat mengatur skala gerakan dengan lancar, sama seperti pemeriksaan papan ketik menggunakan dt.

function love.update(dt)
  if joystick then
    local ax = joystick:getGamepadAxis('leftx')
    player.x = player.x + ax * player.speed * dt
  end
end

Pemeriksaan Singkat

Uji pemahaman Anda tentang penanganan masukan LÖVE.

Ringkasan

Masukan LÖVE hadir dalam dua bentuk: gunakan love.keyboard.isDown dan love.mouse.isDown untuk memeriksa tindakan berkelanjutan, lalu tanggapi fungsi panggilan balik peristiwa seperti love.keypressed dan love.mousepressed untuk tindakan satu kali.

Antarmuka pemrograman tetikus, teks, dan pengendali permainan melengkapinya. Memilih gaya yang tepat membuat pengendalian tetap responsif dan bebas galat.

Gratis untuk memulai

Belajar Lua dengan tutor AI — gratis

Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.

Kursus
40
Pelajaran
159

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Menangani Masukan” gratis?

Ya — teks lengkap “Menangani Masukan” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Lua Academy, upgrade ke CoddyKit PRO. Kursus Lua Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Menangani Masukan”?

Tanggapi tombol dan tetikus. Kamu berlatih Lua Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Lua Academy?

Tidak diperlukan pengalaman sebelumnya. Lua Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.

Berapa lama pelajaran “Menangani Masukan” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Lua Academy ini?

Ya. Setiap pelajaran Lua Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Loop Gim LOVE
  2. Menggambar Bentuk dan Gambar
  3. Menangani Masukan
  4. Gerakan dan Tabrakan
← Kembali ke Lua Academy