2016-11-19 13 views
1

スプライトノードのアウトラインのみのための物理ノードを作成しようとしています。このため、私はedgeLoopF​​romRectを使用しようとしました。しかし、これを試してみると、物理ボディがスプライトノードの位置と一致しません。たとえば、スプライトノードは画面の中央にあり、物理ボディは画面の上隅にあります(写真を参照 - フィジックスボディの輪郭はコーナーのみを表示し、一部は画面外です)。私はこれを使って、ゲームエリアの概要を作成します。ゲームエリアの概要は、オブジェクトがゲームオーバーのために接触するための境界線として機能します。Swift、SpriteKit:edgeLoopF​​romRectを使用しているときにSpriteNodeに物理ボディの位置が正しくない

Screen Shot

ここに私のコードです:

//Physic Body Outline Test 

    let screenS = SKSpriteNode(imageNamed: "TestImage") 
    screenS.size = CGSize(width: 100, height: 100) 
    screenS.position = CGPoint(x: self.size.width/2, y: self.size.height/2) 
    screenS.physicsBody = SKPhysicsBody(edgeLoopFrom: screenS.frame) 
    screenS.physicsBody!.affectedByGravity = false 
    self.addChild(screenS) 

はなぜ、これまでオフの位置ですか?私は間違って何をしていますか?これは、ゲームエリアの物理的な輪郭を設定するための正しいアプローチでもありますか?

ありがとうございます! :D

+0

スプライトとフィジックスを表示するスクリーンショットを投稿できますか? –

+0

"これを使用してオブジェクトの境界線として動作するゲーム領域のアウトラインを作成します。" - スプライトの輪郭をスプライトの境界線としたいのですか? Sprtesは通常、ボリュームベースの物理学の本体を持っています。エッジベースのボディは境界などに使用されますが、通常、シーンのフレームを使用してスプライトが画面外に出るのを止めます。 –

答えて

2

スプライトの位置をphysicsBodyの定義後に設定する行を移動するだけで、これに関するSpriteKitにバグがあるようです。あなたがで終わる必要があります。

screenS.physicsBody = SKPhysicsBody(edgeLoopFrom: screenS.frame) 
screenS.position = CGPoint(x: self.size.width/2, y: self.size.height/2) 

それはスプライトのphysicsBodyとしてedgeLoopを使用するためにまだ少し奇妙だ - SKは、スプライトが何の質量などを持っていないと思うだろうと予想されるように任意の物理的相互作用は機能しません。

+0

ありがとう:アドバイスをしてくれてありがとう、私はそれを周り遊びます:) – HeanMachine

1

screenS.position行を削除するとデフォルトで動作しますが、スプライトは親の中心に既​​に配置されていますが、スプライトを子として追加する前に位置を設定することで、PhysicsBodyを移動するだけです私がテストしたものからスプライト自体。

1

フィジックスボディを作成するときにスプライトフレームを使用しています。フィジックスボディはスプライトを基準にして配置されているため、オフになっています。スプライトの位置を移動する前にフィジックスボディを追加してください。

関連する問題