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个球。我 math.random 的语法错了吗? 我已经尝试了几种方式,但不确定接下来该怎么做。 先感谢您的帮助!

点赞
用户1387346
用户1387346

是的,语法是错误的。请参阅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

2014-12-16 14:05:54