使用for循环在Corona中设置对象的x位置

时间:2013-04-04 07:49:43

标签: lua corona

在我的游戏类中,我从另一个类(objA和objB)调用两个对象,如下所示:

for i=1, countA do
pos.x = pos.x + 15
objA = objClass:new("objClass", group, pos)
wArray[i]=i
end

for j=1, countB do
pos.x = pos.x + xPoint
objB = objClass:new("objCLass", group, pos)
end

我需要for循环,因为我想在我的游戏类中添加这些对象的随机数。我的问题是,我想在我的游戏中同时定位a和b。例如:objA - objA - objB - objB - objA或objB - objA - objB - objB。但是,根据我当前的代码,在添加所有objB对象之前,我最终获得的模式将全部为objA。

我知道简单的答案就是只使用一个for循环,但我看到的问题是我需要在游戏中至少有1个objA和1个objB。我无法拥有所有objB或所有objA。什么是让他们随机定位的最佳方法?提前谢谢。

2 个答案:

答案 0 :(得分:2)

如果你想在As和B之间随机选择,你可以试试

local ab = {}

for i = 1,countA+countB do
    ab[i] = i<=countA and "A" or "B"
end

for i = 1,countA+countB do
    local idx = math.random(#ab)
    local choice = table.remove(ab,idx)

    if choice=="A" then
        pos.x = pos.x + 15
        objA = objClass:new("objClass", group, pos)
    else
        pos.x = pos.x + xPoint
        objB = objClass:new("objClass", group, pos)
    end
end

答案 1 :(得分:1)

-- Prepare your counters (just an example)
local countA = math.random(3)  -- 1,2,3
local countB = math.random(5)  -- 1,2,3,4,5

-- Generate permutation
repeat
   if math.random(1-countB, countA) > 0 then 
      countA = countA - 1
      -- Do something with objA
   else
      countB = countB - 1
      -- Do something with objB
   end
until countA + countB == 0