2016-07-17 3 views
0

現在、SKPhysicsBodiesを追加した2つのSKSpriteNodesがあります。 SKJointが接続されていないと、期待どおりに衝突します。私がSKPhysicsジョイントを追加するとすぐに、彼らはちょうど互いを通過します。私が追加するジョイントはすべて正しく機能しますが、SKPhysicsJointLimitは、ノードがどれほど近づくかではなく、互いに離れて移動できる範囲を制限します。これをどうすれば解決できますか?両方のノードのSKPhysicsJointLimitの追加後にSKPhysicsBodiesが衝突しない

let joint = SKPhysicsJointLimit.joint(withBodyA: object1.physicsBody!, bodyB: object2.physicsBody!, anchorA: CGPoint(x: object1.position.x + iconController.position.x, y: object1.position.y + iconController.position.y), anchorB: CGPoint(x: object2.position.x + iconController.position.x, y: object2.position.y + iconController.position.y)) 
    joint.maxLength = screen.height * 0.4 

physicsWorld.add(joint) 

PhysicsBody:ここ

私は関節のために使用しているコードであるIはSKPhysicsBodyの上記変形のための異なる値とそれをテストして、それが実行

self.physicsBody = SKPhysicsBody(circleOfRadius: self.size.width/2) 
self.physicsBody?.allowsRotation = false 
self.physicsBody?.friction = 0 
self.physicsBody?.mass = 0.1 

同じ。

答えて

0

SKPhysicsJointオブジェクトは2つのフィジックスボディを接続し、フィジックスワールドで一緒にシミュレートされます。 またSKPhysicJointPinを使用することができます。

ピンジョイントが一緒に固定かのように独立して アンカーポイントの周りを回転するために、2つのボディを可能にします。あなたが望むように、彼らはdidBeginContactを解雇したように、あなたのオブジェクトは、下剤エンジンとSKPhysicsJoint添加する前に、うまく動作し、あなたがsetted持っているように、私はあなたの問題は、単に間違ってアンカーであると考えられる場合は

。追加しよう:

シーンの初期化コードに

let skView = self.view as! SKView skView.showsPhysics = true

:あなたは下剤体の概要が表示され、多分あなたはすぐに問題が表示されます。私はお互いに衝突するように構成要素の一例を作ってみるよあなたを助けるために

enum CollisionTypes: UInt32 { 
    case Boundaries = 1 
    case Element = 2 
} 

class GameScene: SKScene,SKPhysicsContactDelegate { 
    private var elements = [SKNode]() 
    override func didMoveToView(view: SKView) { 
     physicsWorld.gravity = CGVector(dx: 0, dy: 0) 
     self.physicsWorld.contactDelegate = self 
     let boundariesFrame = CGRectMake(20, 20, 200, 400) 
     let boundaries = SKShapeNode.init(rect: boundariesFrame) 
     boundaries.position = CGPointMake(350,150) 
     let boundariesBody = SKPhysicsBody.init(edgeLoopFromRect: boundariesFrame) 
     boundariesBody.dynamic = false 
     boundariesBody.categoryBitMask = CollisionTypes.Boundaries.rawValue 
     boundariesBody.contactTestBitMask = CollisionTypes.Element.rawValue 
     boundaries.physicsBody = boundariesBody 
     addChild(boundaries) 
     for index in 0..<5 { 
      let element = SKShapeNode(circleOfRadius: 10) 
      let body = SKPhysicsBody(circleOfRadius: 10) 
      body.linearDamping = 0 
      // body.mass = 0 
      body.dynamic = true 
      body.categoryBitMask = CollisionTypes.Element.rawValue 
      body.contactTestBitMask = CollisionTypes.Boundaries.rawValue | CollisionTypes.Element.rawValue 
      body.collisionBitMask = CollisionTypes.Boundaries.rawValue | CollisionTypes.Element.rawValue 
      element.physicsBody = body 
      element.position = CGPoint(x: size.width/2, y: size.height/2 - 30 * CGFloat(index)) 
      elements.append(element) 
      addChild(element) 
     } 
    } 
} 

は、それはあなたの問題を見つけるためにあなたを助けることができると思います。

+0

私はあなたが示唆したように物理学を見せて何が起こっているのか以前に調べていました。しかし、物理学を示すだけで、私はそれが表示されるべきだと思ったものを示した。どちらのアンカーも、各ノードの中間に正しく配置され、ノード間のジョイントを示す線が表示されていました。繰り返しますが、ジョイントは外向きで動作しますが、ノードが互いに向かって内側に移動するときには、単に衝突しません。 – mhillsman

+1

あなたのオブジェクトはSKPhysicsジョイントの追加の前によく衝突しましたか?あなたの質問では、コードを報告しないので私はそれを尋ねます。 –

+0

はい、うまく衝突しました。実際には、ジョイントが追加されても、通常は互いを除くすべてのノードに衝突します。私は私の質問に私のコードのいくつかを追加します。 – mhillsman

関連する問題