local i = nil
local randNum = nil
local tableSize = nil
local gap = 300
local t = {1, 2, 3, 4, 5}
local tableSize = 5
for i=1,5,1 do
randNum = t[mRandom(tableSize)]
table.remove(t, randNum)
if randNum == 1 then
pencilOne.x = 680 + (gap*i)
pencilTwo.x = 680 + (gap*i)
end
if randNum == 2 then
scissor.x = 680 + (gap*i)
end
if randNum == 3 then
paperClip.x = 680 + (gap*i)
end
if randNum == 4 then
inkPot.x = 680 + (gap*i)
end
if randNum == 5 then
gum.x = 680 + (gap*i)
end
tableSize = tableSize - 1
end
我试图在每次迭代后获得一个唯一的随机值。我正在使用table.remove技术来完成它。我不知道为什么它没有给我独特的随机值。亲切的,帮助。 :)
答案 0 :(得分:4)
这些行从表中提取一个值,然后错误地使用值本身作为table.remove
的索引:
randNum = t[mRandom(tableSize)]
table.remove(t, randNum)
你真正想写的是:
randIndex = mRandom(tableSize)
randNum = t[randIndex]
table.remove(t, randIndex)
答案 1 :(得分:2)
问题在于:
randNum = t [mRandom(tableSize)]
让我们假设在第一次迭代中你得到一个随机的1卷。 randNum值计算如下:
randNum = t[1]
randNum = 1
然后下一个语句从表中删除第二个条目。在这种情况下,表格变为:
t = {2,3,4,5}
在下一次迭代中,随机函数范围是1-4。让我们假设新的滚动数是4.现在randNum计算为:
randNum = t[4]
randNum = 5
下一个声明试图从表中删除第5个条目。哪个不存在。所以你的代码将无法正常工作。
为了解决问题,您可以使用以下代码更改随机数生成:
randSize = mRandom(tableSize)
randNum = t[randSize]
table.remove(t, randSize)