在表格中向前和向后进展

第一次在Stack Overflow上,但肯定在这里找到了很多有用的信息!

目前我正在尝试弄清楚如何根据当前选择在表格中选择下一个项目或上一个项目。

我的当前表格如下:

maleSkins = { 7,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,32,33,34,35,
        36,37,43,44,45,46,47,48,49,51,52,57,58,59,60,61,66,67,72,73,80,82,83,
        84,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,
        112,113,114,115,116,117,118,120,121,122,123,124,125,126,127,128,132,
        133,134,135,136,137,142,143,144,146,147,153,154,156,159,160,161,162,
        168,170,173,174,175,176,177,179,180,181,182,183,184,185,186,187,188,
        189,200,202,203,204,206,210,212,213,217,220,221,222,223,227,228,229,
        230,234,235,236,239,240,241,242,247,248,249,250,252,254,258,259,260,261,262 }

femaleSkins = { 9,10,11,12,13,31,38,39,40,41,53,54,55,56,69,76,77,88,89,90,91,92,
        93,129,130,131,138,139,140,141,145,148,151,152,157,190,191,192,193,195,
        196,197,198,199,201,207,211,214,215,216,218,219,224,225,226,232,233,237,238,243,244,245,246,251,256,257 }

默认选择在maleSkins表中“7”,当他们选择“female”作为性别时,我将使用femaleSkins表。

目前我的函数调用如下:

function selSkin(button,state)
if button ~= "left" and state ~= "up" then
    return
end
if source == createChar.maleButt then
    femaleSkin = false
    maleSkin = true
elseif source == createChar.femaleButt then
    maleSkin = false
    femaleSkin = true
end
if source == createChar.nextSkin then
    if maleSkin == true then
        newModel = table.concat(maleSkins,)
    elseif femaleSkin == true then
    end
elseif source == createChar.prevSkin then
    if maleSkin == true then
    elseif femaleSkin == true then
    end
end
end

所以,在“createChar.nextSkin”和“createChar.prevSkin”中,我正在尝试根据当前皮肤在表格中进行排序,但我不确定如何继续。

我希望有人能够给我这样做的组成部分,我会自己构建其余部分!

(附注:我将使用的预定义变量)

maleSkin = true
femaleSkin = true
curSkin = 7
newModel = nil
点赞
用户10126088
用户10126088

此外,将表格索引保存在全局变量中。 有几种方法,例如 skinIndex = 1 ,你的代码可以像这样:

if source == createChar.nextSkin then
  newModel = maleSkin and maleSkins[skinIndex + 1] or femaleSkins[skinIndex + 1]
elseif source == createChar.prevSkin then
  newModel = maleSkin and maleSkins[skinIndex - 1] or femaleSkins[skinIndex - 1]
end

但你必须注意 skinIndex 小于 1 或大于 #maleSkins/ #femaleSkins

2018-12-06 10:00:29
用户4984564
用户4984564

首先欢迎来到 stack overflow :)

我发现一个小问题:你有两个变量来存储角色是男性还是女性。这允许有4种组合,其中2种没有意义。你可以只使用一个变量,比如说 maleSkin,当它为假时,就使用女性的皮肤。或者,你可以只用 skinType='male'skinType='female' (Lua 将字符串内设为整数,因此比较速度与整数相同)

现在,除非你计划拥有数百万种以上的皮肤,否则你可以通过迭代表格来找出当前皮肤然后使用前面的那一个。

function skinOffset(skin, skinList, offset)
  for i,current_skin in ipairs(skinList) do
    if current_skin == skin then
      return skinList[i + offset]
    else
  end
end

现在,要获得下一个皮肤,你可以使用 skinOffset(curSkin, maleSkins, 1),而要获得前一个皮肤,就使用 skinOffset(curSkin, femaleSkins, -1)

2018-12-06 13:37:30