2015-10-19 58 views
1

我用下面的代碼:重複爆炸中LOVE2D

local BGexplosions = {} 
local image = love.graphics.newImage("textures/explosion.png") 

function startBGExplosion(x, y, magn) 
    table.insert(BGexplosions, {x = x, y = y, magn = magn, t = 0}) 
end 

function drawBGExplosions() 
    for k, ex in pairs(BGexplosions) do 
    local sx = (ex.t/(ex.magn)) 
    local sy = (ex.t/(ex.magn)) 
    love.graphics.setColor(255, 255, 255, 255*(1 - (ex.t/(ex.magn)))) 
    local ssx = 0.5 + (sx/2) 
    local ssy = sy 

    love.graphics.draw(image, ex.x - (256*ssx*0.5), ex.y - (256*ssy), 0, ssx, sst, 0, 0) 

    love.graphics.setColor(255, 255, 255, 180*(1-(ex.t/(4*ex.magn)))) 
    love.graphics.circle("fill", ex.x, ex.y, 2048*(ex.t/(4*ex.magn)), 32) 
    end 
end 

function updateBGExplosions(dt) 
    for k, ex in pairs(BGexplosions) do 
    ex.t = ex.t + dt 
    if ex.t > 4*ex.magn then 
     BGexplosions[k] = nil 
    end 
    end 
end 

每當敵人被殺死,它重複發生爆炸的4倍。我在煙霧代碼中使用了類似的函數,但是我可以在不使用多個變量的情況下更改時間。我相當肯定錯誤是在數字值,任何人都可以告訴我如何解決這個問題?

回答

0

在遍歷表時不要使用table.remove;您可能會多次跳過表格或處理元素的元素。

改爲將條目設置爲nil

if ex.t > 4*ex.magn then 
    BGexplosions[k] = nil 
end 
+0

沒有不幸的是工作,當它重複,它變得越來越大,所以我知道它的發生是因爲一個數值,但我找不到我的一生中,功能重複。 –