math.random 和 corona 语法不正确



我已经这样做了 2 天,但一无所获。我想从数组中选择 4 个球并随机丢弃它们,但为了让系统记住并在以后要求输入。我卡在第一点上:

local ballImages =
{
  display.newImage("ball1.png"),
  display.newImage("ball2.png"),
  display.newImage("ball3.png"),
  display.newImage("ball4.png"),
  display.newImage("ball5.png"),
  display.newImage("ball6.png"),
  display.newImage("ball7.png"),
  display.newImage("ball8.png"),
  display.newImage("ball9.png"),
  display.newImage("ball10.png"),
  display.newImage("ball11.png"),
  display.newImage("ball12.png"),
  display.newImage("ball13.png"),
  display.newImage("ball14.png"),
  display.newImage("ball15.png"),
  display.newImage("ball16.png"),
  display.newImage("ball17.png"),
  display.newImage("ball18.png"),
  display.newImage("ball19.png"),
  display.newImage("ball20.png")
}
function setup()
  math.randomseed(os.time())
end
setup()
local ballImages = ballImages[math.random(4,#ballImages)]
physics.addBody(ballImages)

我只有 1 个球可以随机掉落。我的数学随机语法是错误的吗?我尝试了几种方法,但不确定从这里开始。提前感谢您的帮助!

是的,语法是错误的。请参阅 http://docs.coronalabs.com/api/library/math/random.html:

当使用两个整数 m 和 n 调用时,math.random 返回 [m, n] 范围内的统一伪随机整数。

您应该拨打 4 次电话math.random(#ballImages)

如果你只想要4个球,可能不止一次同一个球,你就完成了。

但是,如果您

想要不同的球,如果您绘制的数字与先前选择的球相对应,则可能必须重新绘制。也就是说,如果你的两个math.random(#ballImages)返回相同的数字i,那就意味着"丢球"i两次。如果这没有意义,您可以执行以下操作:

drawn = {}
local drop=4                                -- how many balls to draw
while drop > 0 do                           -- while we have balls left to draw
    local ball = math.random(#ballImages)   -- draw a random ball
    if drawn[ball] == nil then              -- if ball wasn't selected before
        drawn[ball] = 1                     -- mark it as selected
        physics.addBody(ballImages[ball])   -- "drop" the ball
        drop = drop - 1                     -- decrement how many more balls
    end 
end    

如果您的显示和物理对象有效,那么此代码段也应该有效。看这里 : http://ideone.com/GQC2C6

相关内容

最新更新