我正在制作一个 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)
}
并将此添加到 didBeginContact
的 if
语句中
self.joinPhysicsBodies(firstBody, bodyB:secondBody, point:contact.contactPoint)
其中 contact.contactPoint
是接触点。
关于xcode - 碰撞时将节点粘到另一个节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27094366/