Как исправить ошибку b2Assert(kNormal > b2_epsilon) в b2ContactlSolver?
В моей игре для iPhone приложение главного героя ловит врагов (представленных b2body) в небольших пространствах. Иногда, когда слишком много врагов попадают в ловушку слишком маленького пространства, моя игра заканчивается b2Assert(kNormal > b2_epsilon).
Какая опасность в игнорировании этого утверждения? В моей игре, когда враги оказываются в ловушке в небольшом пространстве, им мало что нужно, так что если они ведут себя нефизически, это нормально. Однако, если игнорирование этого утверждения вызывает другие проблемы с физическим движком box2D вне области захваченного b2body, тогда мне нужно попытаться это исправить. Если так, то как бы это исправить?
Наконец, запускаются ли Asserts в сборке релиза приложения?
2 ответа
Все может произойти, если вы игнорируете утверждение. Они не будут запущены в сборках релиза. Тем не менее, вы должны рассматривать их как фатальные программные ошибки.
Утверждение используется, чтобы удостовериться, что вход метода находится в пределах определенных границ, или условия для выполнения метода являются допустимыми. Если это не так, и программа утверждает, что результат метода не определен. Это может быть просто проигнорировано и не даст результатов (хотя это может просочиться в другие части кода, что приведет к появлению там последующих ошибок). Или он просто рухнет, сразу или даже случайно в более позднее время.
Вы должны выяснить точные обстоятельства этого утверждения, а затем убедиться, что эти обстоятельства не происходят. Если враги могут быть пойманы в ловушку в небольших пространствах, убедитесь, что этого не произойдет - от вас зависит, как вы это сделаете.
Это утверждение было удалено из b2ContactSolver.cpp 18 июня 2011 года. Попробуйте обновить Box2D.
Утверждения - всего лишь инструмент для отладки, они не запускаются и никогда не выполняются в сборке выпуска.