Tutorial:Callback Functions (Tiếng Việt)
Hàm callback trong LÖVE được gọi bởi love.run để thực hiện những nhiệm vụ khác nhau, và chúng đều tùy ý có thể có hoặc không. Tuy nhiên, trải nghiệm game thực thụ đòi hỏi dùng đến gần như toàn bộ callback, vì vậy bạn nên biết chúng là gì.
Callback, đối với người mới lập trình hoặc chưa biết đến thuật ngữ này, có thể được coi là một hàm hoạt động theo hướng ngược lại. Trong một hàm thông thường như love.graphics.draw hoặc math.floor, bạn có thể gọi nó rồi Love hoặc Lua thực hiện một thao tác. Còn callback thì là một hàm bạn lập trình nên và Love gọi đến ở những thời điểm nhất định. Điều này khiến cho bạn dễ dàng giữ cho mã lệnh ngăn nắp và tối ưu. Chẳng hạn, vì love.load chỉ được gọi khi trò chơi khởi động lần đầu (trước bất cứ callback nào khác), nên đó sẽ là nơi phù hợp để đặt mã lệnh nạp nội dung của trò chơi, hoặc nếu không thì thực hiện khâu chuẩn bị.
Contents
love.load
function love.load()
image = love.graphics.newImage("cake.jpg")
local f = love.graphics.newFont(12)
love.graphics.setFont(f)
love.graphics.setColor(0,0,0,255)
love.graphics.setBackgroundColor(255,255,255)
end
Hàm này được gọi đúng một lần, khi trò chơi khởi động, và thường là nơi bạn nạp những nguyên liệu trò chơi, khởi tạo các biến và thiết lập các giá trị riêng. Tất cả những thứ này cũng có thể được đặt ở nơi khác, nhưng đặt ở đây sẽ đồng nghĩa với việc chúng được thực hiện đúng một lần, tiết kiệm được nhiều tài nguyên hệ thống.
love.update
function love.update(dt)
if love.keyboard.isDown("up") then
num = num + 100 * dt -- mỗi giây làm tăng num thêm 100
end
end
Hàm này được gọi liên tục và có thể sẽ là nơi phần lớn phép toán được thực hiện. 'dt' đóng vai trò "delta time" và là số giây trôi qua kể từ lần cuối cùng hàm này được gọi (thường là một giá trị nhỏ như 0.025714).
love.draw
function love.draw()
love.graphics.draw(image, imgx, imgy)
love.graphics.print("Nhấn chuột và kéo rê hình chiếc bánh, hoặc dùng các phím mũi tên", 10, 10)
end
love.draw
là nơi mà tất cả việc vẽ được tiến hành (nếu điều này còn chưa đủ rõ ràng) và nếu bạn gọi bất kì lệnh nào của love.graphics.draw
nào bên ngoài hàm này thì nó sẽ không có hiệu quả gì. Hàm này cũng được gọi liên tục, vì vậy hãy nhớ rằng nếu bạn thay đổi font/color/mode/etc ở cuối hàm thì nó sẽ có ảnh hưởng đến những thứ ở đầu hàm. Chẳng hạn:
function love.load()
love.graphics.setColor(0,0,0)
end
function love.draw()
love.graphics.print("Dòng chữ này không phải màu đen bởi tác dụng của dòng lệnh dưới đây", 100, 100)
love.graphics.setColor(255,0,0)
love.graphics.print("Dòng chữ này màu đỏ", 100, 200)
end
love.mousepressed
Available since LÖVE 0.10.0 |
This variant is not supported in earlier versions. |
function love.mousepressed(x, y, button, istouch)
if button == 1 then
imgx = x -- chuyển hình ảnh đến nơi nhấn chuột
imgy = y
end
end
Hàm này được gọi đến mỗi khi một nút chuột được nhấn và nó nhận nút chuột cùng tọa độ của con trỏ chuột lúc nhấn. Nút có thể có bất cứ giá trị nào trong số các giá trị ấn định. Hàm này kết hợp nhịp nhàng với love.mousereleased
.
love.mousereleased
Available since LÖVE 0.10.0 |
This variant is not supported in earlier versions. |
function love.mousereleased(x, y, button, istouch)
if button == 1 then
fireSlingshot(x,y) -- hàm tự viết này được định nghĩa ở một nơi khác
end
end
Hàm này được gọi mỗi khi một nút chuột được nhả ra; hàm nhận vào nút cùng với tọa độ của con trỏ chuột lúc nhả. Bạn có thể kèm hàm này với hàm love.mousepressed
hoặc viết riêng; chúng không có bất kì sự liên hệ nào.
love.mousepressed
function love.keypressed(key, unicode)
if key == 'b' then
text = "Phím B được nhấn."
elseif key == 'a' then
a_down = true
end
end
Hàm này được gọi mỗi khi phím được nhấn; nó nhận vào phím vừa nhấn này. Phím có thể nhận bất kì giá trị ấn định nào. Hàm này kết hợp rất tốt với love.keyreleased
.
love.keyreleased
function love.keyreleased(key, unicode)
if key == 'b' then
text = "Phím B được nhả."
elseif key == 'a' then
a_down = false
end
end
Hàm này được gọi mỗi khi phím được nhấn; nó nhận vào phím vừa nhả này. Bạn có thể dùng hàm này cùng với love.keypressed (Tiếng Việt)|love.keypressed
hoặc dùng riêng; chúng không có bất kì sự liên hệ nào.
love.focus
function love.focus(f)
if not f then
print("LOST FOCUS")
else
print("GAINED FOCUS")
end
end
Hàm này được gọi mỗi khi người dùng kích chuột ra ngoài phạm vi, và vào trong cửa sổ LOVE. Chẳng hạn, nếu người đó đang chơi một trò trong cửa sổ mà lại kích chuột vào trình duyệt Internet, thì trò chơi có thể nhận biết được và tự động tạm dừng.
function love.focus(f) gameIsPaused = not f end
function love.update(dt)
if gameIsPaused then return end
-- Phần còn lại của hàm love.update bạn viết có thể đưa vào đây
end
love.quit
function love.quit()
print("Cám ơn bạn đã chơi! Mong được gặp lại!")
end
Hàm này được gọi mỗi khi người chơi kích vòa nút đóng cửa sổ (thường có kí hiệu X). Chẳng hạn, nếu người dùng quyết định là đã chơi xong, họ có thể kích nút đóng. Lúc này, trước khi đóng lại, trò chơi có thể lưu giữ trạng thái hiện hành. Đó là những hàm callback và cách dùng cơ bản của chúng.
Ngôn ngữ khác
Dansk –
Deutsch –
English –
Español –
Français –
Indonesia –
Italiano –
Lietuviškai –
Magyar –
Nederlands –
Polski –
Português –
Română –
Slovenský –
Suomi –
Svenska –
Türkçe –
Česky –
Ελληνικά –
Български –
Русский –
Српски –
Українська –
עברית –
ไทย –
日本語 –
正體中文 –
简体中文 –
Tiếng Việt –
한국어
More info