У меня есть метод, который возвращает значение 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: http://stackoverflow.com/questions/401847/circle-rectangle-collision-detection-intersection/402010#402010
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 в коде)