2013-09-24 11 views
5

Ho una nuova domanda per tutti voi, mi chiedo se siete in grado di fare enumerazioni all'interno di Lua, non sono sicuro che questo sia il nome corretto per questo, il modo migliore per spiegarlo è se vi mostro un esempio usando PAWN (se conosci un linguaggio di tipo C avrà senso).Enumerazioni all'interno di 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; 
} 

Quindi questo è quello che sarebbe simile in pegno, ma non so come fare questo in Lua ... Questo è quello che ho ottenuto finora.

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 

Ma ovviamente dà un errore, qualcuno di voi conosce il modo corretto di farlo? Grazie!

+0

Questa conversazione non risolve il problema di data nel titolo "Come fare enumerazioni in LUA?". Potrebbe essere modificato in: "Come tradurre l'esempio PAW in LUA?" – Akhneyzar

risposta

4

Qualcosa di simile ?

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 era più veloce di me :)

+0

Aha va bene! È quello che stavo cercando in ogni caso: 3 – Bicentric

+1

'spawnCount' può essere sostituito con' # spawnedSpiders' – hjpotter92

+0

@ hjpotter92 Per semplicità, sì, come nella risposta di Yu Hao. Se c'è un * lotto * di spider sarà leggermente meno efficiente, anche perché l'operatore di lunghezza '#' è 'O (log n)'. Ma il vero motivo per cui non l'ho fatto è che volevo stare vicino al codice di @ Bicentric (evita di introdurre un altro concetto). – catwell

4

Non so su PEDONE, ma credo che questo è quello che cercavi:

local spawnedSpiders = {} 

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

dargli una prova:

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

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

uscita: first hello

+0

Grazie! Questo è esattamente quello che stavo cercando^_^Lo apprezzo, grazie amico! – Bicentric