0

在我的游戏类中,我从另一个类(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。但是,鉴于我当前的代码,我最终得到的模式将是所有 objA 在添加所有 objB 对象之前先。

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

4

2 回答 2

2

如果您想在 As 和 Bs 之间随机选择,您可以尝试类似

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
于 2013-04-04T09:44:26.483 回答
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
于 2013-04-04T09:45:21.163 回答