精灵套件-精灵套件在落地时跳跃



所以我得到了两个SKSpriteNodes,一个Human和一个Block。如果人类击中了顶部的障碍物,它应该能够跳跃,如果他在空中,他就不应该。我正在使用intersectsNode,但后来Human只跳到块的末尾,我真的不知道为什么。论坛的一位成员告诉我使用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)];
}

我建议您使用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(playerBlockContact)替换您的if([Human intersectsNode:Block1])

最新更新