Khi các dự án trở nên phức tạp, trở nên quan trọng để nghĩ về cách các kịch bản được tổ chức. Các pratice tốt quản lý có thể đảm bảo rằng mã không bị dupliqued giữa các kịch bản, hoặc trở nên khó khăn để quản lý.
Một cách tốt hơn để tổ chức và tái sử dụng mã là với script module , một loại script độc đáo có thể lưu trữ một loạt các chức năng và biến đổi được thiết kế để đáp ứng một mục đích chung, chẳng hạn như quản lý ti
Bằng cách lưu mã thông thường được sử dụng trong các tập tin mã, nó đơn giản hơn việc duy trì và tổ chức mã, vì những thay đổi chỉ cần được thực hiện trên một tập tin mã, chứ không phải cập nhật nhiều tập tin.
Cơ bản của Script
Script modul thực sự là một đối tượng riêng biệt so với đối tượng script. Ở Roblox, script modul có thể được xác định bằng một biểu tượng màu tím .
Tạo một mô-đun script
ModuleScripts thường được đặt trong ServerScriptService khi được sử dụng bởi các tập lệnh bên máy chủ và ReplicatedStorage khi được sử dụng bởi các tập lệnh bên máy chủ (như GUI).
- Tạo một ModuleScript trong ServerStorage .
Cấu trúc của Script Mô-đun
Khi tạo, mọi mảnh code trong mô-đun đều bắt đầu với mã dưới đây:
local Module = {}return Module
Dòng local Module = {} tạo một bảng, hoặc container của mã, nơi các chức năng và biến đổi của module có thể được lưu trữ. This table should be renamed to the module's purpose, such as RewardManager</
local RewardManager = {}return RewardManager
Vì vậy, các script khác có thể sử dụng các chức năng hoặc biến không định kỳ của một module, mỗi module kết thúc với lời MyModule . Mỗi khi một script cố gắng lấy mã từ module, lời trả về cho phép script truy cập vào mã được lưu trong bảng dữ liệu module.
Thêm vào Scripts Module
Để thêm chức năng hoặc biến đổi vào module which can be used in another script, type the module table's name, followed by a dot, and the name of the function or variable, like in TestModule.myVariable . Using the dot operator is another way of adding code into a table, allowing other scripts to access that code whenever the module table is returned.
local TestModule = {}
-- Thêm một biến đổi vào bảng 'TestModule'
TestModule.myVariable = 100
-- Thêm một chức năng vào bảng 'TestModule'
function TestModule.doTask(player)
-- Mã mã
end
return TestModule
Lấy phạm vi trong Script Hành Tây
Đối với một chức năng hoặc biến được sử dụng trong một script bên ngoài, không viết local .
Hệ thống local ở trước các biến và hàm có nghĩa là chúng chỉ nơi đó mà thôi. Khi đây là một thực tập tốt cho hầu hết các script để giảm lỗi và trục trặc, bạn không thể làm hàm và biến module local.
Bất kỳ mã được sử dụng bởi các thẻ ngày chỉ cần bởi các kịch bản của module này vẫn phải bao gồm local . Ví ví dụ / trường hợp, mã dưới đây bao gồm biến đổi địa phương difficultyModifier , chỉ có
local RewardManager = {}
-- Chỉ sử dụng được trong tập lệnh module
local rewardCoins = 50
-- Chỉ sử dụng được trong tập lệnh module
local difficultyModifier = {
easy = 0.5,
normal = 1,
hard = 2
}
-- Có thể sử dụng trong các tập lệnh khác
function RewardManager.getCoinReward(difficulty)
local coins = difficultyModifier[difficulty] * rewardCoins
return coins
end
return RewardManager
Sử dụng các mô-đun trong các tập tin khác
Bởi chính mình, một script module không thể thiết lập mã — nó cần phải được tải trong một script khác bằng cách sử dụng thông số require() . Hàm require() đón nhận một biến, vị trí của script module trong Explorer.
Để sử dụng một mô-đun, trong một script riêng, thiết lập một biến bằng với require(moduleScript) .
local MyModule = require(ServerStorage.ModuleScript)
Bây giờ, biến MyModule đã tạo bảng module được tạo trong script module đó. Để sử dụng các hàm và biến từ bảng module đó, hãy nhập tên biến, theo dấu chấm, và tên chính xác của nó, như MyModule.myFunction() . K
local MyModule = require(ServerStorage.ModuleScript)MyModule.myFunction()
RewardManager Ví dụ
ModuleScript - Người quản lý phần thưởng
local RewardManager = {}
-- Chỉ sử dụng được trong tập lệnh module
local rewardCoins = 50
-- Chỉ sử dụng được trong tập lệnh module
local difficultyModifier = {
easy = 0.5,
normal = 1,
hard = 2
}
-- Có thể sử dụng trong các tập lệnh khác
function RewardManager.getCoinReward(difficulty)
local coins = difficultyModifier[difficulty] * rewardCoins
return coins
end
return RewardManager
Tập lệnh - TreasureChestScript
local ServerStorage = game:GetService("ServerStorage")-- Tải mô-đun scriptlocal RewardManager = require(ServerStorage.RewardManager)--Gọi chức năng từ script modulelocal coins = RewardManager.getCoinReward("easy")print("Should award " .. coins .. " coins")
Tổng hợp
Một số mẹo ở đây đối mặt với các vấn đề thông thường khi làm việc với các script module. Hãy lưu ý rằng các script module có thể là một chủ đề phức tạp với nhiều nuance. Để biết thêm chi tiết, hãy xem hướng dẫn kỹ thuật này về Module Scripts . Vấn đề: Nhận một thông điện lỗi bao gồm: "Infinite yield possible" hoặc "not a valid member" .
Kiểm tra chính tả của tập lệnh mà nó được tải. require() phải bao gồm con đường chính xác và chính tả của tập lệnh mà nó có thể được tên khác như bảng module. Vấn đề: Nhận một thông điện lỗi bao gồm: "attempt to index global" .
Trong bất kỳ script nào sử dụng một script module, hãy đảm bảo rằng nó được tải bằng cách sử dụng chức năng require(). Nếu không, script đó không thể sử dụng các hàm và biến từ script module.
Tổng kết
Script module trong Roblox là một phương thức mã hóa mà các nhà lập trình sử dụng để tổ chức và tái sử dụng mã. Một script module thường được lưu vào ServerStorage (hoặc ReplicatedStorage cho các tương tác cơ sở client). Từ đó, các script khác có thể gọi các hàm và biến được lưu trong script module đó.
ví dụ / trường hợp, một trò chơi có thể đưa điểm cho người chơi khi thu thập các thể. Một script modul có thể xử lý mã để đưa điểm. Sau đó, các tập lệnh cho các loại trò chơi khác nhau có thể chỉ cần gọi modul script function. Điều này giảm thiểm cần thiết phải tái sử dụng mã giữa các tập lệ