1

2 つの物理ボディを別のボディに追加したいのですが、showsPhysics がオンになっていると、そのように見えます。

ここに画像の説明を入力

これが私が使用するコードです

// Set anchor point
self.anchorPoint = CGPointMake(0.5, 0.5)

// setup physics
self.physicsWorld.gravity = CGVectorMake( 0.0, -5.0)
self.physicsWorld.contactDelegate = self

// set physics body
let borderBody: SKPhysicsBody = SKPhysicsBody(edgeLoopFromRect: self.frame)
borderBody.friction = 0.0
self.physicsBody = borderBody;
self.physicsBody?.categoryBitMask = BodyType.edge.rawValue

// setup background color
let skyColor = SKColor(red: 81.0/255.0, green: 192.0/255.0, blue: 201.0/255.0, alpha: 1.0)
self.backgroundColor = skyColor

let hero = SKSpriteNode(color: UIColor.whiteColor(), size: CGSizeMake(38, 38))
hero.physicsBody = SKPhysicsBody(rectangleOfSize: hero.size)
hero.physicsBody?.usesPreciseCollisionDetection = true
hero.physicsBody?.velocity = CGVectorMake(0, 0)

hero.physicsBody?.restitution = 0.0
hero.physicsBody?.friction = 0.0
hero.physicsBody?.angularDamping = 0.0
hero.physicsBody?.linearDamping = 1.0

hero.physicsBody?.allowsRotation = false
hero.physicsBody?.mass = 0.0641777738928795

// Adding the head
let head = SKSpriteNode(color: UIColor.blackColor(), size: CGSize(width: hero.frame.size.width, height: 10))
head.position = CGPoint(x: 0, y: hero.frame.size.height/2 - head.frame.size.height/2)
head.physicsBody = SKPhysicsBody(rectangleOfSize: head.size)
hero.addChild(head)


// Adding the feet
let feet = SKSpriteNode(color: UIColor.orangeColor(), size: CGSize(width: hero.frame.size.width, height: 10))
feet.position = CGPoint(x: 0, y: -(hero.frame.size.height/2 - feet.frame.size.height/2))
feet.physicsBody = SKPhysicsBody(rectangleOfSize: feet.size)

feet.physicsBody?.categoryBitMask = heroFeetCategory
feet.physicsBody?.collisionBitMask = edgeCategory | groundCategory
feet.physicsBody?.contactTestBitMask = groundCategory

hero.addChild(feet)

world.addChild(hero)

// join head
let join = SKPhysicsJointFixed.jointWithBodyA(hero.physicsBody, bodyB:head.physicsBody, anchor:hero.position)
self.physicsWorld.addJoint(join)

// join feet
let joinFeet = SKPhysicsJointFixed.jointWithBodyA(hero.physicsBody, bodyB:feet.physicsBody, anchor:hero.position)
self.physicsWorld.addJoint(joinFeet)

私も試してみます

let convertedPosition = self.convertPoint(hero.position, fromNode: hero.parent!)

これが将来問題になるかどうかはわかりませんが、なぜヒーロー ノードは他のノードと正常に接続できるのでしょうか。

4

1 に答える 1

0

問題を解決するためにできることの 1 つは、SKPhysicsJointPin のアンカー位置を取得self.size.width/2し、X とself.size.height/2Y に追加することです。本質的に、あなたがしていることは、self.anchorPoint がまだ (0 、0)、そうではありません。何らかの理由で、SKPhysicsJoints は常にシーンの anchorPoint が左下隅にあると想定します。ハッピーコーディング!

于 2015-08-21T17:05:29.260 に答える