2013-09-24 40 views
5

Tôi có một câu hỏi mới cho tất cả các bạn, tôi tự hỏi nếu bạn có thể thực hiện các enumartions trong Lua, tôi không chắc chắn nếu đây là tên chính xác cho nó, cách tốt nhất tôi có thể giải thích điều này là nếu tôi chỉ cho bạn một ví dụ sử dụng PAWN (nếu bạn biết một ngôn ngữ loại C nó sẽ có ý nghĩa).Số đếm trong Lua?

#define MAX_SPIDERS 1000 

new spawnedSpiders; 

enum _spiderData { 
    spiderX, 
    spiderY, 
    bool:spiderDead 
} 

new SpiderData[MAX_SPIDERS][_spiderData]; 

stock SpawnSpider(x, y) 
{ 
    spawnedSpiders++; 
    new thisId = spawnedSpiders; 
    SpiderData[thisId][spiderX] = x; 
    SpiderData[thisId][spiderY] = y; 
    SpiderData[thisId][spiderDead] = false; 
    return thisId; 
} 

Vì vậy, đó là những gì nó sẽ trông giống như trong PAWN, tuy nhiên tôi không biết làm thế nào để làm điều này trong Lua ... Đây là những gì tôi có cho đến nay.

local spawnedSpiders = {x, y, dead} 
local spawnCount = 0 

function spider.spawn(tilex, tiley) 
    spawnCount = spawnCount + 1 
    local thisId = spawnCount 
    spawnedSpiders[thisId].x = tilex 
    spawnedSpiders[thisId].y = tiley 
    spawnedSpiders[thisId].dead = false 
    return thisId 
end 

Nhưng rõ ràng là có lỗi, bạn có biết cách làm đúng cách không? Cảm ơn!

+0

cuộc nói chuyện này không giải quyết được vấn đề đưa ra trong tiêu đề "Làm thế nào để làm enumerations trong LUA?". Nó có thể được sửa đổi thành: "Làm thế nào để dịch ví dụ PAW sang LUA?" – Akhneyzar

Trả lời

4

Something như thế này ?

local spawnedSpiders = {} 
local spawnCount = 0 

function spawn_spider(tilex, tiley) 
    spawnCount = spawnCount + 1 
    spawnedSpiders[spawnCount] = { 
     x = tilex, 
     y = tiley, 
     dead = false, 
    } 
    return spawnCount 
end 

EDIT: Yu Hao là nhanh hơn so với tôi :)

+0

Aha không sao! Đó là những gì tôi đang tìm kiếm anyway: 3 – Bicentric

+1

'spawnCount' có thể được thay thế bằng' # spawnedSpiders' – hjpotter92

+0

@ hjpotter92 Để đơn giản, vâng, như trong câu trả lời của Yu Hao. Nếu có * nhiều * nhện thì nó sẽ kém hiệu quả hơn một chút bởi vì toán tử độ dài '#' là 'O (log n)'. Nhưng lý do thực sự tôi không làm là tôi muốn ở gần mã của Bicentric (tránh giới thiệu một khái niệm khác). – catwell

4

Tôi không biết về cầm đồ, nhưng tôi nghĩ rằng đây là những gì bạn có nghĩa là:

local spawnedSpiders = {} 

function spawn(tilex, tiley) 
    local spiderData = {x = tilex, y = tiley, dead = false} 
    spawnedSpiders[#spawnedSpiders + 1] = spiderData 
    return #spawnedSpiders 
end 

Cho nó một thử nghiệm:

spawn("first", "hello") 
spawn("second", "world") 

print(spawnedSpiders[1].x, spawnedSpiders[1].y) 

Output: first hello

+0

Cảm ơn bạn! Đây chính xác là những gì tôi đang tìm kiếm^_^Tôi đánh giá cao nó, cảm ơn người đàn ông! – Bicentric