3

私はシーン キットでコーンホール ゲームに取り組んでおり、バグSCNPhysicsShapeSCNPhysicsBody摩擦に遭遇しました。ゲームのボードは.daeファイルを介してロードされ、SCNPhysicsShapeTypeConcavePolyhedron. これにより、ビーンバッグが穴から落ちますが、ボードの摩擦が無効になるようです. ビーン バッグがボードに当たると、摩擦値が 1.0 であるにもかかわらず、すぐに滑り落ちます (ビーン バッグの摩擦値も 1.0 です)。ボードを変更するとSCNPhysicsShapeTypeConvexHull、摩擦は機能しますが、ビーンバッグは穴から落ちません.

これが私のカスタムボードの初期化です:

let geo = nodeWithFile("board.dae").geometry!

geo.materials = [SCNMaterial()] 
geo.firstMaterial!.diffuse.contents = "wood_texture.png"
geo.firstMaterial!.diffuse.wrapS = SCNWrapMode.Repeat
geo.firstMaterial!.diffuse.wrapT = SCNWrapMode.Repeat
geo.firstMaterial!.diffuse.mipFilter = SCNFilterMode.Linear

self.geometry = geo
self.position = position
self.rotation = SCNVector4Make(1, 0, 0, -CFloat(degreesToRadians(65.0)))

let shape = SCNPhysicsShape(geometry: geo, options: [SCNPhysicsShapeTypeKey: SCNPhysicsShapeTypeConcavePolyhedron])

self.physicsBody = SCNPhysicsBody(type: .Static, shape: shape)
self.physicsBody!.restitution = 0.0
self.physicsBody!.rollingFriction = 1.0
self.physicsBody!.friction = 1.0

そして、これがビーンバッグのカスタム初期化です

let geo = SCNBox(width: 20.0, height: 4.0, length: 20.0, chamferRadius: 5.0)

self.geometry = geo
self.position = position
self.geometry!.firstMaterial!.diffuse.contents = UIColor.blueColor()

let shape = SCNPhysicsShape(geometry: geo, options: [SCNPhysicsShapeTypeKey: SCNPhysicsShapeTypeBoundingBox])

self.physicsBody = SCNPhysicsBody(type: .Dynamic, shape: shape)
self.physicsBody!.restitution = 0.0
self.physicsBody!.rollingFriction = 1.0
self.physicsBody!.friction = 1.0

これらは両方とも、サブクラス化するクラスの init メソッド内にありますSCNNode

私の質問は、どうすればボードを維持ConcavePolyhedronし、同時に摩擦を機能させることができるでしょうか?

4

1 に答える 1

1

This might not be the best answer, but it would work. Redesign your board into multiple pieces, leaving a hole in the middle that is not part of a geometry.

于 2015-06-17T15:25:55.487 に答える