从表格中获取数据时,只匹配第一个键。

我像这样将键存储在表中:

d = { ["Rune_Test"] = "78100;Iconmisc0002", ["Sword_Test"] = "78097;Iconsword11" }

这个表存储在我的ItemHandler.lua文件中。

local ItemHandler = {}

d = {}

function ItemHandler:LoadData(_data)
    d = _data
end

function ItemHandler:GetData()
    return d
end

function SaveItem(nId, Name, Sprite)
    d[trim(string.gsub(Name, " ", "_"))] = nId .. ";" .. Sprite
end

我的主要lua文件是Central.lua,它看起来像这样:

function Central:OnRestore(eLevel, tData)
    DataItems = tData.items or {}
    ItemHandler:LoadData(tData.items or {})
end

function Central:OnSave(eLevel)
local tSave =
{
    items = ItemHandler.GetData()
}
return tSave
end

我的xml保存文件目前看起来像这样:

<?xml version="1.0" encoding="UTF-8"?>
<Document>
<N K="items" T="t">
    <N K="Rune_Test" T="s" V="78100;Iconmisc0002"/>
    <N K="Sword_Test" T="s" V="78097;Iconsword11"/>
</N>

我正在使用这样的函数查找特定键:

function ItemHandler:CheckItem(iName)
    if d[iName] ~= nil then
        Print("Got it!")
    end
end

但是我遇到的问题是,我只在xml文档中的第一个键上得到匹配。

print(d.Rune_Test)
= 78100;Iconmisc0002
e
print(d.Sword_Test)
= nil

我想我只是错过了一些非常简单的东西。当谈到LUA时,我是个大新手,几天前才开始学习。 :) 但我有C#知识,所以不是全部都是胡说八道:P

点赞
用户5043289
用户5043289

如果跳过加载/保存程序,它将起作用:

d = { ["Rune_Test"]  = "78100;Iconmisc0002",
      ["Sword_Test"] = "78097;Iconsword11" }

print(d.Rune_Test)
print(d.Sword_Test)

这将打印:

78100;Iconmisc0002
78097;Iconsword11

因此,您从 XML 中加载的内容不是您想要的。


尝试加载后打印表格,例如:

for k, v in pairs (d) do
  print ("key=", k, "value=", v)
end -- for

您应该会看到:

key= Rune_Test value= 78100;Iconmisc0002
key= Sword_Test value= 78097;Iconsword11
2016-02-06 21:37:22