【发布时间】:2016-01-23 05:48:54
【问题描述】:
我是 corona 的新手,正在尝试在移动平台上进行某种对象池化。当他们退出屏幕时,他们会从visibleBlocks 移动到blocks。当我记录两个表的计数时,数字与它们应有的方式不匹配.. 屏幕上出现的块中有很长的间隙。
我的积木生成:
local color = 'red'
for i = 1, 10 do
local block = display.newRect( 0, 0, 60, 2 )
block.index = i
block.name = 'block'
block.isVisible = false
physics.addBody( block, 'static' )
blocks[i] = block
sceneGroup:insert( block )
block.color = color
color = switchColor(block)
end
代码检测块何时离开屏幕
function update()
for k, block in pairs(visibleBlocks) do
block.y = block.y - 1
if block.y < 0 then
removeBlock(block)
end
end
删除块代码
function removeBlock(block)
block.isVisible = false
block.isBodyActive = false
blocks[block.index] = block
visibleBlocks[block.index] = nil
print (' ')
print( 'blocks: ' .. #blocks)
print( 'visible blocks: ' .. #visibleBlocks )
end
在计时器上执行的addblock
function addBlock()
local block = table.remove( blocks )
if block ~= nil then
block.isVisible = true
block.isBodyActive = true
visibleBlocks[block.index] = block
block.x = math.random(
block.contentWidth/2 + 20,
display.contentWidth - block.contentWidth/2 - 20
)
block.y = display.contentHeight
end
end
我的控制台输出如下所示:
Oct 23 08:50:16.281: blocks: 0
Oct 23 08:50:16.281: visible blocks: 9
Oct 23 08:50:17.289:
Oct 23 08:50:17.290: blocks: 0
Oct 23 08:50:17.290: visible blocks: 8
Oct 23 08:50:18.329:
Oct 23 08:50:18.329: blocks: 10
Oct 23 08:50:18.329: visible blocks: 7
Oct 23 08:50:19.353:
Oct 23 08:50:19.354: blocks: 9
Oct 23 08:50:19.354: visible blocks: 6
Oct 23 08:50:20.313:
Oct 23 08:50:20.314: blocks: 8
Oct 23 08:50:20.314: visible blocks: 5
Oct 23 08:50:21.339:
Oct 23 08:50:21.340: blocks: 0
Oct 23 08:50:21.340: visible blocks: 10
Oct 23 08:50:22.376:
Oct 23 08:50:22.376: blocks: 7
Oct 23 08:50:22.376: visible blocks: 10
Oct 23 08:50:23.390:
Oct 23 08:50:23.390: blocks: 6
Oct 23 08:50:23.390: visible blocks: 10
Oct 23 08:50:24.392:
Oct 23 08:50:24.393: blocks: 5
Oct 23 08:50:24.393: visible blocks: 10
Oct 23 08:50:25.457:
Oct 23 08:50:25.457: blocks: 4
Oct 23 08:50:25.458: visible blocks: 10
这些数字加起来应该总是 10 对吧?有点不对劲
【问题讨论】:
-
我没有完全遵循这里的逻辑,但您几乎可以肯定通过回收它们之间的索引在您的表中创建“洞”。而
#只定义在没有孔的表上。