首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SpriteKit落地跳跃

SpriteKit落地跳跃
EN

Stack Overflow用户
提问于 2014-04-13 14:53:48
回答 1查看 205关注 0票数 0

所以我得到了两个SKSpriteNodes,一个人类和一个街区。如果人类击中了顶部的方块,它应该能够跳,如果他在空中,他不应该。我使用的是intersectsNode,但是人类只跳在块的末尾,我真的不知道为什么。论坛的一位成员告诉我要使用bodyAtPoint,但是如果我使用它,它只显示:“SKSpriteNode声明选择器bodyAtPoint没有可见的@接口”。

我使用intersectsNode的当前代码:

代码语言:javascript
运行
复制
-(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)];
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-13 15:26:28

我建议您使用didBeginContact:而不是intersectsNode。在MyScene中,您可以这样设置它:

代码语言:javascript
运行
复制
@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)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23044223

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档