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

ジョイントとphysicsWorldが同じカテゴリのビットマスクを持っていたため、機能していないことに気付きました。金ブロックには異なるビット マスクがありましたが、ジョイントの一部であったため、同じカテゴリのビット マスクと衝突しませんでした。

于 2016-12-25T03:34:49.297 に答える