From 9a2511dd50ba5cbc3fdf8d19aa409fdeeb278d49 Mon Sep 17 00:00:00 2001 From: liabru Date: Sat, 22 Mar 2014 14:44:56 +0000 Subject: [PATCH] fixed a leak in grid broadphase --- src/collision/Grid.js | 41 +++++++++++++++++++++-------------------- 1 file changed, 21 insertions(+), 20 deletions(-) diff --git a/src/collision/Grid.js b/src/collision/Grid.js index 3e40a54..7e1ff46 100644 --- a/src/collision/Grid.js +++ b/src/collision/Grid.js @@ -220,9 +220,11 @@ var Grid = {}; // keep track of the number of buckets the pair exists in // important for Grid.update to work - var pairId = Pair.id(body, bodyB); - if (grid.pairs[pairId]) { - grid.pairs[pairId][2] += 1; + var pairId = Pair.id(body, bodyB), + pair = grid.pairs[pairId]; + + if (pair) { + pair[2] += 1; } else { grid.pairs[pairId] = [body, bodyB, 1]; } @@ -241,23 +243,19 @@ var Grid = {}; * @param {} body */ var _bucketRemoveBody = function(grid, bucket, body) { - // remove from bodies - for (var i = 0; i < bucket.length; i++) { - var bodyB = bucket[i]; + // remove from bucket + bucket.splice(bucket.indexOf(body), 1); - // when position of body in bucket array is found, remove it - if (bodyB.id === body.id) { - bucket.splice(i, 1); - continue; - } else { - // keep track of the number of buckets the pair exists in - // important for Grid.update to work - var pairId = Pair.id(body, bodyB); - if (grid.pairs[pairId]) { - var pairCount = grid.pairs[pairId][2]; - grid.pairs[pairId][2] = pairCount > 0 ? pairCount - 1 : 0; - } - } + // update pair counts + for (var i = 0; i < bucket.length; i++) { + // keep track of the number of buckets the pair exists in + // important for _createActivePairsList to work + var bodyB = bucket[i], + pairId = Pair.id(body, bodyB), + pair = grid.pairs[pairId]; + + if (pair) + pair[2] -= 1; } }; @@ -282,8 +280,11 @@ var Grid = {}; // if pair exists in at least one bucket // it is a pair that needs further collision testing so push it - if (pair[2] > 0) + if (pair[2] > 0) { pairs.push(pair); + } else { + delete grid.pairs[pairKeys[k]]; + } } return pairs;