Ваша проблема здесь
while (cellCollision) {
loop++;
cellCollision = false;
и здесь
if (c.CollidesWith(cb)) {
cellCollision = true;
По сути, то, что происходит здесь, когда он впервые проходит цикл while, нужно только сделать этоодин раз, потому что cellCollision
становится ложным после того, как он прошел один раз, поэтому ему не нужно повторять цикл.Затем, когда значение c.CollidesWith(cb)
становится истинным, оно снова становится истинным cellCollision
, заставляя его снова пройти цикл.Если у вас нет способа изменить c.CollidesWith(cb)
на false, он станет бесконечным циклом, поэтому вам нужно снова сделать c.CollidesWith(cb)
false или использовать другое логическое значение, чтобы предотвратить этот бесконечный цикл.