Что вы могли бы сделать, это добавить bool в отношении того, столкнулся ли объект (я бы предложил в качестве переменной экземпляра)
С этим вы можете установить его в YES, когда пересекаются пересекающиеся
в вашем методе goDown вы затем проверяете логическое значение, если логическое значение равно YES, то не меняйте центр, в противном случае продолжайте изменять его
Каждый раз, когда вызывается -goDown, добавьте проверку на столкновение
Таким образом, если он столкнулся, вы можете фактически деактивировать этот таймер, чтобы он больше не выключался, или вы можете сделать это булевским способом, о котором я упоминал выше.
Я предлагаю создать метод, который проверяет наличие коллизии с одним аргументом текущего центра, чтобы вы могли проверить, не приведет ли это к добавлению 5 к y центра, чтобы вы могли деактивировать таймер / прекратить добавление 5 справа. как это сталкивается, а не сразу после
- (void)goDown {
float delta = [self checkCollision];
mainSprite.center = CGPointMake(mainSprite.center.x, mainSprite.center.y + delta);
}
- (float)checkCollision {
CGRect testFrame = CGRectMake(mainSprite.frame.origin.x, mainSprite.frame.origin.y + 5.0f, mainSprite.frame.size.width, mainSprite.frame.size.height);
if (CGRectIntersectsRect(testFrame, collisionImage.frame)) {
return 0.0f;
// stop the sprite from moving anymore so it doesn't actually intersect, just stops "on top"
}
return 5.0f;
// if they have not collided then just continue on your way
пример кода на самом деле не показывает ни один из моих методов выше
что я здесь делаю, это проверяю столкновение, и если это будет столкновение, тогда прекратите добавлять любое к центру, иначе оно продолжит добавлять к центральной координате