2

我有一台与物体连接的建筑起重机。如果起重机是静止的,则接头工作正常。

但是我添加了起重机从左到右移动的能力,每当起重机即将与物体一起离开视野时,物体就会撞到屏幕边缘并在起重机继续行驶时卡住。即使在起重机回到视野后,接头也会停止工作。

这是一张图片。顶部的黄线代表钩子永远遵循的路径。它从左到右。蓝色矩形周围的金块是卡住的。那是最初与起重机的灰色钩子连接的块。但是当钩子移动到视图的右侧时,金块会碰到屏幕的边缘并永远停留在那里。

对我来说没有意义的是视图边缘的类别位掩码为 0,而金块为 64。在其他级别中,金块永远不会与边缘发生碰撞。但是这里当起重机移动到边缘时,金块与边缘发生碰撞并卡住。如您所见,基于浅蓝色的物理线,关节仍然存在。

在此处输入图像描述

这是从场景中调用并配置关节的代码。就像我说的那样,如果钩子是静止的,那么接头就可以正常工作。

craneBase.alpha = 0
let path = CGMutablePath()
path.move(to: CGPoint(x: craneBase.position.x, y: craneBase.position.y))
 path.addLine(to: CGPoint(x: craneBase.size.width - 100, y: craneBase.position.y + 10))
 path.addLine(to: CGPoint(x: craneBase.position.x, y: craneBase.position.y))
 craneHook.initializeMovingJoint(withObject: childNode(withName: "HookedObject") as! SKSpriteNode)
 hook.run(SKAction.repeatForever(SKAction.follow(path, asOffset: false, orientToPath: false, duration: 10)))
 physicsWorld.add(craneHook.joint)

这是将关节添加到块的起重机钩类的代码。

private func initHook() {
    self.hookSize = CGSize(width: 10, height: 10)
    self.physicsBody = SKPhysicsBody(rectangleOf: hookSize)
    self.physicsBody?.categoryBitMask = PhysicsBit.none
    self.physicsBody?.isDynamic = false
    self.physicsBody?.affectedByGravity = false
}

//Creates the joint between the object and the hook
func initializeJoint(withObject object: SKSpriteNode) {
    initHook()
    hookedObject = object
    jointAnchor = CGPoint(x: self.anchorPoint.x, y: self.anchorPoint.y)

    joint = SKPhysicsJointFixed.joint(withBodyA: physicsBody!, bodyB: hookedObject.physicsBody!, anchor: jointAnchor)
    doesHaveHookedObject = true
}

并且金块的设置从场景编辑器分配到 64 的类别蒙版。我已经测试了金块,它们不会与边缘发生碰撞。我不确定为什么它在移动时会与边缘发生碰撞。

4

1 回答 1

0

我意识到它不起作用,因为关节和物理世界具有相同的类别位掩码。尽管金块具有不同的位掩码,但它是关节的一部分,因此与无相同类别位掩码发生冲突。

于 2016-12-25T03:34:49.297 回答