У меня есть метод, который возвращает значение bool
с несколькими точками выхода.
Однако, похоже, что он работает неправильно, поэтому я хотел бы установить автоматическую точку останова, чтобы увидеть, когда она возвращает значение YES, чтобы я мог проверить все переменные и вычисления в отладчике.
Я хотел бы остановить отладчик всякий раз, когда возвращается значение YES
.
У меня установлена аналогичная интеллектуальная точка останова для objc_exception_throw
, поэтому я знаю, что это возможно, я просто не знаю, как.
(Если это кому-нибудь поможет, то как вы можете установить точку останова исключения: в окне Точки останова (Выполнить -> Показать -> Точки останова) введите objc_exception_throw
как «Точка останова» и libobjc.A.dylib
как «Местоположение»)
РЕДАКТИРОВАТЬ: конкретный код, для которого я хотел бы использовать его:
- (BOOL)collisionOccured {
// Assumption: helicopter is of square shape (collision calculated by radius), walls are rectangles
// This approach is based on the solution seen here: /248054/obnaruzhenie-stolknoveniya-okruzhnosti-s-pryamougolnikom-peresechenie#248064
float helicopterImageWidth = [helicopter texture].contentSize.width;
float wallImageWidth = [[walls lastObject] texture].contentSize.width;
float wallImageHeight = [[walls lastObject] texture].contentSize.height;
float helicopterCollisionRadius = helicopterImageWidth * 0.4f;
CGPoint helicopterPosition = helicopter.position;
int numWalls = [walls count];
for (int i = 0; i < numWalls; i++) {
CCSprite *wall = [walls objectAtIndex:i];
if ([wall numberOfRunningActions] == 0) {
// The wall is not moving, we can skip checking it.
continue;
}
CGPoint wallPosition = wall.position;
float helicopterDistanceX = abs(helicopterPosition.x - wallPosition.x - wallImageWidth/2);
float helicopterDistanceY = abs(helicopterPosition.y - wallPosition.y - wallImageHeight/2);
if (helicopterDistanceX > (wallImageWidth/2 + helicopterCollisionRadius)) { return NO; }
if (helicopterDistanceY > (wallImageHeight/2 + helicopterCollisionRadius)) { return NO; }
if (helicopterDistanceX <= (wallImageWidth/2)) { return YES; }
if (helicopterDistanceY <= (wallImageHeight/2)) { return YES; }
float cornerDistance_sq = powf((helicopterDistanceX - wallImageWidth/2), 2) +
powf((helicopterDistanceY - wallImageHeight/2), 2);
return (cornerDistance_sq <= powf(helicopterCollisionRadius, 2));
}
// this should not occur
return NO;
}
Этот метод вызывается через
- (void)update:(ccTime)delta {
if ([self collisionOccured]) {
NSLog(@"A collision occured");
}
}
Проблема в том, что метод обновления принимает delta
(прошедшее время) в качестве аргумента, поэтому я не могу проверить, что происходит кадр за кадром - всякий раз, когда я продолжаю выполнение, мне представляется другая сцена.
(я использую cocos2d в коде)