1

基本上:

  • 我正在 LÖVE 引擎中制作游戏,您可以在其中单击以创建块
  • 每次单击时,鼠标 X 和鼠标 Y 上都会创建一个块
  • 但是,我只能让一个块出现,因为我必须将该块(或表)命名为“object1”

有什么方法可以创建一个又一个表并增加值?(如 object1{}、object2{}、object3{} 等……但在主表中,'created_objects')

但只有当点击时,我想排除循环部分(但如果不是请告诉我)

到目前为止,这是我的代码,但无法编译。

function object_create(x, y, id) **--Agruments telling the function where the box should spawn and what the ID of the box is (variable 'obj_count' which increases every time a box is spawned)**

currobj = "obj" .. id **--Gives my currently created object a name**

crob.[currobj] = {} **--Is supposed to create a table for the current object, which holds all of its properties. **

crob.[currobj].body = love.physics.newBody(world, x, y, "dynamic")
crob.[currobj].shape = love.physics.newRectangleShape(30, 30) 
crob.[currobj].fixture = love.physics.newFixture(crob.[currobj].body, crob.[currobj].shape, 1)     **--The properties**
crob.[currobj].fixture:setRestitution(0.3) 

但是我应该用什么替换 [currobj]?


解决了

找到了我要找的东西。如果人们想知道,这是代码:

function block_create(x, y, id) --(鼠标x和y,以及增加的变量)

blocks[id] = {}
blocks[id][1] = love.physics.newBody(world, x, y, "dynamic")
blocks[id][2] = love.physics.newRectangleShape(45, 45)
blocks[id][3] = love.physics.newFixture(blocks[id][1], blocks[id][2])
blocks[id][3]:setRestitution(0.2)
blocks[id][4] = math.random(0, 255) --The Color
blocks[id][5] = math.random(0, 255)
blocks[id][6] = math.random(0, 255)

blockcount = blockcount + 1
4

2 回答 2

3

我可能会做这样的事情。

local blocks = {} -- equivalent of your crob table

function create_block(x, y)
    local block = funcToCreateBlock() -- whatever code to create the block
    table.insert(blocks, block)
    return block
end

如果您想获得对刚刚使用该函数创建的块的引用,只需捕获它即可。

-- gives you the new block, automatically adds it to the list of created blocks
local new_block = create_block(0, 10) 

将块对象粘贴到块表中,并自动为每个对象在表中分配一个数字索引。因此,如果您为 3 次不同的鼠标点击调用了 3 次 create_block(),blocks表格将如下所示:

blocks = {
    [1] = blockobj1,
    [2] = blockobj2,
    [3] = blockobj3
}

您可以通过执行从块表中获取第二个块 obj

local block2 = blocks[2]

pairs或者您可以使用或循环遍历表中的所有块ipairs

for idx, block in pairs(blocks) do
     -- do something with each block
end

抱歉,如果这不能完全回答您的问题。但是从您所写的内容来看,您似乎没有真正的理由需要将块命名为 crob 表中的任何特定内容。

于 2013-01-19T17:05:29.210 回答
2

如果您希望这些表是全局的,那么您可以执行以下操作:

sNameOfTable = "NAME"
_G[sNameOfTable] = {1,2}

然后您将有一个表变量,如此NAME所示(键盘)。

否则,如果您希望它成为其他桌子的孩子,那么这样的事情也可以:

tTbl = {}
for i = 1, 20 do
  local sName = string.format( "NAME%02d", i )
  tTbl[sName] = {1,2}
end
for i, v in pairs(tTbl) do
  print( i, v )
end

不要担心这里的未排序输出(键盘)。带有索引的 Lua 表无需排序即可使用。

于 2013-01-20T15:29:19.393 回答