SpriteKit прыгает при ударе о землю

Итак, у меня есть 2 узла SKSpriteNode, человек и блок. Если Человек ударит по блоку наверху, он сможет прыгнуть, если он в воздухе, то не сможет. Я использую intersectsNode, но тогда Человек прыгает только в конце Блока, и я действительно не знаю, почему. Участник форума сказал мне использовать bodyAtPoint, но если я его использую, он показывает только: «нет видимого @interface для SKSpriteNode, объявляющего селектор bodyAtPoint».

Мой текущий код с intersectsNode :

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
/* Called when a touch begins */

Human.physicsBody.velocity = CGVectorMake(0, 0);
if([Human intersectsNode:Block1]){
[Human.physicsBody applyImpulse:CGVectorMake(0, 40)];
}

person Community    schedule 13.04.2014    source источник


Ответы (1)


Я предлагаю вам использовать didBeginContact: вместо intersectsNode. В MyScene вы можете настроить это так:

@implementation MyScene
{
    BOOL playerBlockContact
}

- (void)didBeginContact:(SKPhysicsContact *)contact
{
    uint32_t collision = (contact.bodyA.categoryBitMask | contact.bodyB.categoryBitMask);

    if (collision == (CNPhysicsCategoryPlayer | CNPhysicsCategoryBlock))
    {
        playerBlockContact = true;
        NSLog(@"Contact");
    }
}

- (void)didEndContact:(SKPhysicsContact *)contact
{
    uint32_t collision = (contact.bodyA.categoryBitMask | contact.bodyB.categoryBitMask);
    if (collision == (CNPhysicsCategoryPlayer | CNPhysicsCategoryBlock))
    {
        playerBlockContact = false;
        NSLog(@"Contact lost");
    }
}

Затем замените if([Human intersectsNode:Block1]) на If(playerBlockContact).

person sangony    schedule 13.04.2014