Xscale предотвращает обнаружение столкновений

Когда я пытаюсь использовать xscale, чтобы перевернуть любой из моих SKSpriteNodes, они перестают обнаруживать коллизии. Я пробовал много разных способов исправить это, включая перемещение точки привязки, обертывание узла-контейнера вокруг всех моих узлов и повторение физического тела. Этот третий вариант — единственный, с которым я добился успеха, но он не работает в большинстве ситуаций. Есть ли способ исправить это, если не переворачивать все иллюстрации и создавать дубликат каждого анимационного атласа?

    self.player.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:CGSizeMake(30, 60)];
    self.player.position= CGPointMake(400, 200);
    self.player.zPosition = 25;
    self.player.physicsBody.dynamic = YES;
    self.player.physicsBody.usesPreciseCollisionDetection = YES;
    self.player.physicsBody.friction = 0;
    self.player.name = @"player";
    self.player.physicsBody.categoryBitMask = player;
    self.player.physicsBody.contactTestBitMask = ground;
    self.player.physicsBody.collisionBitMask = monsterCategory;
    self.player.physicsBody.allowsRotation = false;
    [self addChild:self.player];

   for (UITouch *touch in touches){
    CGPoint touchLocation = [touch locationInNode:self];
    if (touchLocation.x>self.player.position.x &&touchLocation.y>=135) {
        forward2 = YES;
        multiplierForDirection2 = 1;
    }else if (touchLocation.x<self.player.position.x && touchLocation.y>=135){
        reverse2 = YES;
        multiplierForDirection2 = -1;
    }
    if (mode2 ==1) {
        [self walkingBear];
    }else if (mode2 ==2){
        jump2 = true;
        [self fly];
    }else if (mode2 == 3){
        [self weapon];
    }
}
    self.player.xScale = fabs(self.player.xScale)*multiplierForDirection2;

person user3431312    schedule 17.04.2014    source источник


Ответы (1)


К сожалению нет. Использование команды xScale = -1 разрушает физическое тело спрайта. Я пробовал различные подходы к этой проблеме, но не смог найти приемлемого решения. Единственное решение, которое у вас есть, по крайней мере на данный момент, это создание зеркальных изображений.

Чтобы перевернуть каждое изображение, я использовал приложение «Предварительный просмотр» и создал сочетание клавиш для команды «Отразить по горизонтали». Это значительно ускорило работу.

person sangony    schedule 17.04.2014