SpriteKit Скача при удар в земята

Така че имам 2 SKSpriteNodes, Human и Block. Ако човекът удари блока отгоре, трябва да може да скочи, ако е във въздуха, не трябва. Използвам intersectsNode, но тогава Човекът скача само в края на блока и наистина не знам защо. Член на форума ми каза да използвам bodyAtPoint, но ако го използвам, той показва само: „няма видим @интерфейс за 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