Remove Workaround (日本語)

Physics モジュールに対する問題回避策

World:setCallbacks の第三コールバックでは、コールバックの削除において[1]があります。形状の破壊時に有効な接点がある場合に、次回の Physics 更新時に LÖVE がコールバックを呼び出そうとして異常終了します。この問題は少なくとも LÖVE version 0.6.2 にて出現しました。

この問題を解決するには、その前に必ず最初に全ての有効な接点から形状を除去することで安全に破棄することができます。これは特別な領域へ形状を移動するか、もっと単純なものとして形状を一切衝突させないように設定することで可能になります。

-- 全ての接点分類から形状を削除します。
shape:setMask(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16)
-- 破棄保留リストへ追加します。
table.insert(removals, shape)
-- 描画されたオブジェクト、またはもう描画されないためようにするために
-- フラグで目印を付けたもののどちらかから形状を削除します。

これを完了後に、もはや形状は世界に対して影響を及ぼさなくなります。次回の Physics 更新実行時に、全ての接点は破壊されるため、安全に破棄することができます。

-- 通常は love.update コールバックにて世界の更新が発生します。
world:update(dt)
-- 下記によりリストに加えられた任意の形状を削除することができます。
for _, shape in ipairs(removals) do
	shape:destroy()
end

世界を更新する前に削除対象の形状はもはや何も接触していないことを確実にしておくことに留意してください。

関連

そのほかの言語