2016-12-17 12 views
3

に私はこれを使用して私のプログラムでSKShapeNodesを作成しています:スウィフト3(SpriteKitベース):整列SKPhysicsBody SKShapeNode

let points = [CGPoint(x: x, y: y), CGPoint(x: x2, y: y2)] 
let line = SKShapeNode(points: &points, count: points.count) 

私が午前問題は、私はラインにphysicsBodyを追加するたびに、physicsBodyがあるということですラインと整列していない。ラインの位置が常にCGPoint(x:0、y:0)なので、問題があることに気が付きます。物理的なボディは、ラインがどこにあるかにかかわらず常に画面の中央にあります。

line.physicsBody = SKPhysicsBody(rectangleOf: (line.frame.size)) 

誰がラインにphysicsBodyを整列させる方法を知っている場合は、あなたのソリューションを使用して返信してください:ここではphysicsBodyを作成するための私のコードです。ありがとう!あなたが他の1つのポイントから物理体を作りたい場合は

+0

別のイニシャライザを使用してこれを修正する方法がいくつかあります。それでも、あなたの例を少し先にデバッグすることができます。 print( 'line.frame.size')とは何ですか?両方のCGPointの質問とハードコード値を編集できますか? (x座標とy座標)? – Whirlwind

答えて

3

、あなたはこのようなものを使用することができます:

class GameScene:SKScene { 

    override func didMove(to view: SKView) { 
     var points = [CGPoint(x: 22, y: 22), CGPoint(x: 155, y: 155)] 
     let line = SKShapeNode(points: &points, count: points.count) 
     print(line.frame.size) 

     line.physicsBody = SKPhysicsBody(edgeFrom: points[0], to: points[1]) 

     addChild(line) 
    } 
} 

これには2つの点を用いたエッジベースの物理学のボディを作成します。エッジ物理学のボディはデフォルトでは静的なので、そのことを念頭に置いてください。連絡先を登録する(またはこの本体と衝突させる)には、もう一方の本体は動的でなければなりません。

このボディを動的にしたい場合は、volume based initializersを探します。

+0

それは完璧に動作してくれてありがとう!私はそれを使用していないし、それがうまく動作するため、影響を受けたBigBragraityをfalseに設定していますか? –

+0

@ J.Treutlein私はちょうどそれをしたので、その行は画面上にとどまっています:)もちろん、重力のためにあなたのラインを落としたい場合は、それを取り除くことができます。 – Whirlwind

+0

ありがとう!私はちょうどチェックしていた:) –

関連する問題