xcode - 碰撞时将节点粘到另一个节点

标签 xcode swift sprite-kit collision-detection collision

我正在制作一个 iOS 游戏(swift xcode)。

有一辆不断移动的汽车(SKAction)和一个可以用滑动手势移动的播放器。

很好,但现在我希望如果玩家触摸汽车,它会随着汽车移动(它会粘在汽车上)

现在我该怎么做呢?

我尝试了很多东西,但没有一个能顺利地工作..

我试过

if (CGRectIntersectsRect(car.frame, player.frame)) {
car.position = player.position
}

这可行,但玩家会被踢到汽车中间,我不希望这样。 我想要的是,如果玩家接触到汽车底部,它就会粘在汽车底部。

我该怎么做?

对于碰撞检测,我也尝试使用:

 func didBeginContact(contact: SKPhysicsContact!) {
    var firstBody:SKPhysicsBody
    var secondBody:SKPhysicsBody

    if(contact.bodyA.categoryBitMask < contact.bodyB.categoryBitMask){
        firstBody = contact.bodyA
        secondBody = contact.bodyB
    }else{
        firstBody = contact.bodyB
        secondBody = contact.bodyA
    }


    if((firstBody.categoryBitMask & CarCategory) != 0 && (secondBody.categoryBitMask & playerCategory) != 0)
    {


    }

}

但我不知道在括号之间放什么才能让它像我想要的那样顺利运行。

最佳答案

您可以使用固定的物理关节连接两个节点。通常,物理关节连接场景中的两个物理体。固定版本 SKPhysicsJointFixed 连接两个主体,使它们充当一个主体。

下面是一个如何用固定关节连接两个物理体的例子:

首先,将其添加到您的 SKScene 子类(例如 GameScene.m)

func joinPhysicsBodies(bodyA:SKPhysicsBody, bodyB:SKPhysicsBody, point:CGPoint) {
    let joint = SKPhysicsJointFixed.jointWithBodyA(bodyA, bodyB: bodyB, anchor: point)
    self.physicsWorld.addJoint(joint)
}

并将此添加到 didBeginContactif 语句中

self.joinPhysicsBodies(firstBody, bodyB:secondBody, point:contact.contactPoint)

其中 contact.contactPoint 是接触点。

关于xcode - 碰撞时将节点粘到另一个节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27094366/

相关文章:

ios - swift 3 : Joining multiple Strings with "+" operator no longer possible

iphone - 我们可以在核心数据中设置主键吗

Xcode 9 启用服务器失败,因为 "xcsd"钥匙串(keychain)密码

ios - Swift 3 在单元格按钮上添加选择器问题

ios - 使用 firebase 云消息传递中的 swift 无法将通知接收到 iPhone

ios - 定位服务不会在其他人的测试 iPhone 上更新吗?

ios - 具有自定义颜色的 UIColor 扩展是真实的吗?

iOS7 Sprite Kit如何在SKSpriteNode上获得长按或其他手势?

ios - Sprite Kit animateWithTextures 滞后

ios - 遵循 CGPathRef 的不准确之处