2013-09-24 13 views
5

我有一个新的问题给大家,我想知道你是否能够在Lua中进行enumartions,我不确定这是否是它的正确名称,我可以解释这个最好的方法是如果我告诉你一个使用PAWN的例子(如果你知道一个C类型的语言,它会有意义的)。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; 
} 

所以这是它看起来像典当的东西,但我不知道如何在Lua中做到这一点...这是我走到这一步。

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 

但显然它会给出一个错误,你有没有知道这样做的正确方法?谢谢!

+0

这次谈话没有解决题目中给出的问题“如何做LUA枚举?”。可以修改为:“如何将PAW示例翻译为LUA?” – Akhneyzar

回答

4

像这样的东西?

local spawnedSpiders = {} 
local spawnCount = 0 

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

编辑:俞灏是比我快:)

+0

啊哈,没关系!这就是我一直在寻找的东西:3 – Bicentric

+1

'spawnCount'可以用'#spawnedSpiders'代替 – hjpotter92

+0

@ hjpotter92为了简单起见,是的,就像在余浩的回答中一样。如果有一大堆蜘蛛,它的效率会稍微低一些,因为长度运算符'#'是'O(log n)'。但是我没有这么做的真正原因是我想要保持接近@ Bicentric的代码(避免引入另一个概念)。 – catwell

4

我不知道棋子,但我认为这是你的意思:

local spawnedSpiders = {} 

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

给它一个测试:

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

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

输出:first hello

+0

谢谢!这正是我期待的^ _ ^我很感激,谢谢你! – Bicentric