Mảng có thể được kết hợp với các vòng lặp, chẳng hạn như while và for, để lặp lại cùng một mã cho mỗi giá trị được chỉ mục. Ví dụ, dịch chuyển từng người chơi trong một mảng đến một địa điểm mới hoặc làm cho một mảng các phần bắt lửa.
Để khám phá việc lặp qua các mảng, hãy tạo một con đường cầu biến mất, nơi mà các phần được đặt vào một mảng và sau đó bị biến mất từng cái một.
Lặp qua một mảng
Đối với dự án, hãy tìm hoặc tạo một bộ ba phần để làm biến mất. Các phần phải được neo lại.
Tạo ba phần. Đặt tên cho các phần theo thứ tự mà chúng nên biến mất, Part1, Part2, Part3.
Trong ServerScriptService, chèn một kịch bản mới và tạo một mảng để lưu trữ các phần.
local pathArray = {}Trên một dòng duy nhất, gõ tên các phần theo thứ tự mà chúng nên biến mất. Sử dụng một dòng mới cho mỗi giá trị sẽ dễ đọc hơn.
local pathArray = {workspace.Part1,workspace.Part2,workspace.Part3,}
Sử dụng vòng lặp for với một mảng
Sử dụng vòng lặp for để lặp qua mảng và kiểm soát tốc độ mà các phần nên biến mất theo thứ tự mà các phần được chỉ mục trong mảng.
Để kiểm soát tần suất một phần biến mất trong giây, hãy tạo một biến tên là VANISH_RATE. Để thử nghiệm, tốt nhất là giữ nó ở một số nhỏ.
local VANISH_RATE = 1.5local pathArray = {workspace.Part1,workspace.Part2,workspace.Part3}Tạo một vòng lặp for với các tham số sau: Bắt đầu: partIndex = 1, chỉ mục của giá trị đầu tiên trong mảng. Kết thúc: #pathArray, kích thước của mảng đó.
for partIndex = 1, #pathArray doendĐể có một độ trễ trước khi một phần biến mất, trong vòng lặp, thêm một task.wait() sử dụng VANISH_RATE.
for partIndex = 1, #pathArray dotask.wait(VANISH_RATE)endĐể làm cho một phần biến mất, hãy tạo một biến mới có tên là whichPart và gán nó bằng partsArray[partIndex]. Sau đó, để làm cho phần đó biến mất, đặt thuộc tính CanCollide của nó thành false và Transparency thành 1.
for partIndex = 1, #pathArray dotask.wait(VANISH_RATE)local whichPart = pathArray[partIndex]whichPart.CanCollide = falsewhichPart.Transparency = 1endKiểm tra rằng các phần của con đường biến mất theo thời gian.
Mẹo khắc phục sự cố
Nếu cầu không biến mất, hãy kiểm tra các vấn đề có thể xảy ra dưới đây:
Vấn đề: Các phần biến mất quá nhanh hoặc tất cả đã biến mất ngay từ đầu.
- Tùy thuộc vào tốc độ mà nhân vật của bạn được tải vào trải nghiệm, các phần đầu tiên có thể đã vô hình. Để khắc phục, hãy thêm một khoảng chờ nhỏ, chẳng hạn như task.wait(2), ở đầu kịch bản.
Lập trình vòng lặp thứ hai
Hiện tại, các phần biến mất mãi mãi. Để làm cho chúng tái xuất hiện, hãy tạo một vòng lặp for thứ hai sẽ lặp qua từng phần và ngay lập tức làm cho mỗi phần có thể đi bộ được.
Sau vòng lặp đầu tiên, hãy thêm một task.wait() để tạo một độ trễ ngắn trước khi con đường tái xuất hiện.
for partIndex = 1, #pathArray dotask.wait(VANISH_RATE)local whichPart = pathArray[partIndex]whichPart.CanCollide = falsewhichPart.Transparency = 1endtask.wait(1)Tự làm, hãy thử lập trình một vòng lặp for thứ hai để làm cho con đường có thể sử dụng lại bằng cách thay đổi thuộc tính CanCollide của từng phần thành true và Transparency thành 0. Khi hoàn thành, hãy kiểm tra công việc của bạn với mã dưới đây.
-- Đặt lại con đường bằng cách làm cho tất cả các phần có thể đi bộ được lạifor partIndex = 1, #pathArray dolocal whichPart = pathArray[partIndex]whichPart.CanCollide = truewhichPart.Transparency = 0endKiểm tra dự án để xác nhận rằng một khi tất cả các phần biến mất, chúng sẽ quay trở lại.
Lặp lại với vòng lặp while
Các phần biến mất và tái xuất hiện, nhưng chỉ một lần. Để làm cho mã liên tục lặp lại, hãy lồng tất cả mã trong một vòng lặp while.
Ở cuối kịch bản, tạo một vòng lặp while true do mới. Sau đó, di chuyển cả hai vòng lặp for vào trong vòng lặp while.
while true do-- Làm cho một phần biến mất từ mảng theo thứ tựfor partIndex = 1, #pathArray dotask.wait(VANISH_RATE)local whichPart = pathArray[partIndex]whichPart.CanCollide = falsewhichPart.Transparency = 1end-- Chờ một giây trước khi làm cho con đường tái xuất hiệntask.wait(1)-- Đặt lại con đường bằng cách làm cho tất cả các phần có thể đi bộ được lạifor partIndex = 1, #pathArray dolocal whichPart = pathArray[partIndex]whichPart.CanCollide = truewhichPart.Transparency = 0endendKiểm tra rằng một khi tất cả các phần biến mất, chúng sẽ tái xuất hiện.
Một phiên bản hoàn chỉnh của dự án có thể được tải xuống.
Kịch bản hoàn thànhlocal VANISH_RATE = 1.0local pathArray = {workspace.Part1,workspace.Part2,workspace.Part3,}while true do-- Làm cho một phần biến mất từ mảng theo thứ tựfor partIndex = 1, #pathArray dotask.wait(VANISH_RATE)local whichPart = pathArray[partIndex]whichPart.CanCollide = falsewhichPart.Transparency = 1end-- Chờ một giây trước khi làm cho con đường tái xuất hiệntask.wait(1.0)-- Đặt lại con đường bằng cách làm cho tất cả các phần có thể đi bộ được lạifor partIndex = 1, #pathArray dolocal whichPart = pathArray[partIndex]whichPart.CanCollide = truewhichPart.Transparency = 0endend
Mảng và ipairs()
ipairs() được sử dụng với mảng. Chữ "i" trong ipairs() đứng cho "chỉ mục." ipairs() có thể được sử dụng để nhanh chóng lặp lại một thao tác trên nhiều đối tượng, như, chẳng hạn, một thư mục đầy các phần.
Điều này sẽ được minh họa bằng cách nhanh chóng thêm các hạt vào một thư mục đầy các phần.
Trong Workspace, tạo một thư mục có tên PartsFolder. Thêm bao nhiêu phần tùy thích.
Trong ServerScriptService, tạo một kịch bản mới và tham chiếu đến thư mục.
Sử dụng GetChildren() để tự động nhận một mảng liệt kê tất cả các đối tượng trong thư mục.
local partsFolder = workspace.PartsFolder-- Nhận được một mảng liệt kê các phần trong PartsFolderlocal partsArray = partsFolder:GetChildren()Sử dụng in ipairs(ArrayToUse) với vòng lặp for để lặp qua partsArray và thêm các hạt.
Kịch bản hoàn thành-- Nhận được một mảng liệt kê các phần trong PartsFolderlocal partsArray = partsFolder:GetChildren()-- Thêm các hạt vào mỗi phần trong mảngfor index, part in ipairs(partsArray) dolocal particles = Instance.new("ParticleEmitter")particles.Parent = partend
Chơi thử và xem các hạt bay lên từ mỗi phần trong thư mục.
Tóm tắt
Các vòng lặp có thể được kết hợp với các mảng để xử lý bất kỳ số lượng giá trị nào một cách nhanh chóng. Nếu bạn muốn kiểm soát chính xác những gì xảy ra với một số phần và theo thứ tự nào, một mảng phải được mã hóa cứng với các giá trị cụ thể.
Để làm việc với nhiều phần mà thứ tự không quan trọng, GetChildren() có thể tạo một mảng con cái của một đối tượng. Sử dụng ipairs(), danh sách có thể được lặp qua nhanh chóng mà không cần biết kích thước của mảng.