2013-09-24 5 views
5

Ich habe eine neue Frage für Sie alle, ich frage mich, ob Sie in der Lage sind, Enumartions in Lua zu tun, ich bin mir nicht sicher, ob das der richtige Name dafür ist, der beste Weg, dies zu erklären ist, wenn ich es dir zeige ein Beispiel mit PAWN (wenn Sie eine C-Typ-Sprache kennen, wird es Sinn machen).Aufzählungen in 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; 
} 

Also das ist, wie es in PAWN aussehen würde, aber ich weiß nicht, wie dies in Lua zu tun ... Das ist, was ich so weit gekommen.

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 

Aber offensichtlich gibt es einen Fehler, weiß jemand von Ihnen den richtigen Weg, dies zu tun? Vielen Dank!

+0

Dieses Gespräch das Thema im Titel angegebenen nicht lösen: "Wie Aufzählungen in LUA zu tun?". Könnte es geändert werden zu: "Wie übersetzt man das PAW Beispiel zu LUA?" – Akhneyzar

Antwort

4

Soetwas ?

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 war schneller als ich :)

+0

Aha, das ist in Ordnung! Es ist das, wonach ich gesucht habe: 3 – Bicentric

+1

'spawnCount' kann durch '# launchedSpiders' ersetzt werden – hjpotter92

+0

@ hjpotter92 Der Einfachheit halber ja, wie in Yu Haos Antwort. Wenn es eine Menge Spinnen gibt, ist es etwas weniger effizient, weil der Längenoperator '#' 'O (log n)' ist. Aber der wahre Grund, warum ich es nicht getan habe, ist, dass ich in der Nähe von @ Bicentrics Code bleiben wollte (vermeide es, ein anderes Konzept einzuführen). – catwell

4

ich über PAWN weiß es nicht, aber ich denke, das ist, was du meinst:

local spawnedSpiders = {} 

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

es einen Test geben:

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

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

Ausgang: first hello

+0

Danke! Genau das habe ich gesucht^_^Ich weiß es zu schätzen, danke Mann! – Bicentric