Remove Workaround (Português)

Possível solução para questão do módulo Physics

Existe um questão não resolvida com o terceiro callback de World:setCallbacks, o callback remove. Se existe contato ativo quando uma forma é destruída, a próxima atualização física irá causar um término abrupto quando o Löve tentas fazer a chamada do callback. Esse problema apareceu a partir da versão 0.6.2 do Löve.

Para uma possível solução deste problema, uma forma precisa primeiro deixar de ter todos os contatos ativos antes para ser destruído com segurança. Isso pode ser feito através da movimentação da forma para uma área específica, ou de maneira mais simples através da configuração para que a forma não colida com qualquer coisa.

-- remove a forma de todas as categorias de contato.
shape:setMask(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16)
-- adiciona na lista de destruição pendente
table.insert(removals, shape)
-- também remove a forma da lista dos objetos desenháveis, ou marca
-- com um indicação que não será mais desenhada

Depois que isso está feito, a forma será mais afetada no mundo. Depois que a próxima atualização física for executada, ela também terá perdido todos os contatos e poderá ser destruída com segurança.

-- a atualização do mundo normalmente ocorre no callback love.update
world:update(dt)
-- você pode em seguida destruir qualquer forma lista para ser removida
for _, shape in ipairs(removals) do
	shape:destroy()
end

Lembre-se de atualizar o mundo antes de remover a forma faz ter certeza que ela não terá mais nenhum contato com qualquer coisa.

Veja Também

Outros Idiomas