Разработка игр для iPhone, обнаружение столкновений, создающих эффект стены - PullRequest
0 голосов
/ 05 ноября 2011

Хорошо, я попробовал это в прошлый раз, и это было слишком расплывчато, поэтому я попробую снова. Я делаю нисходящую перспективную игру для iPhone, есть mainSprite (UIImageView), который будет сталкиваться с другим UIImageView. Когда это произойдет, я хочу, чтобы mainSprite прекратил движение. В основном создание стены. Имеет ли это смысл? Я не использую никаких фреймворков, таких как cocos2d. Я знаю метод CGRectIntersectWithRect, мой вопрос заключается в том, что мне нужно добавить в этот метод. У меня нет других переменных, таких как скорость или скорость, только кнопки, которые будут перемещать спрайт по экрану. Вот мой код.

Это код .m, используемый для перемещения спрайта по экрану.

-(void)goDown{
mainSprite.center = CGPointMake(mainSprite.center.x, mainSprite.center.y+5);
}

-(IBAction)down{
    [self downAnimation];
    goDown = [NSTimer scheduledTimerWithTimeInterval:0.05 target:self selector:@selector(goDown) userInfo:nil repeats:YES];
    if (goDown == nil) {
        goUp = [NSTimer scheduledTimerWithTimeInterval:0.05 target:self selector:@selector(goDown) userInfo:nil repeats:YES];

    }
}

Вот метод, который я настроил для столкновения:

-(void)collision {
    if (CGRectIntersectsRect(mainSprite.frame, collisionImage.frame)) {

    }
}

Помощь будет принята с благодарностью.

1 Ответ

1 голос
/ 05 ноября 2011

Что вы могли бы сделать, это добавить 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

пример кода на самом деле не показывает ни один из моих методов выше

что я здесь делаю, это проверяю столкновение, и если это будет столкновение, тогда прекратите добавлять любое к центру, иначе оно продолжит добавлять к центральной координате

...