2017-12-12 30 views
2

私は以下で "Floor"と呼ばれる別のクラスを持っています。SKSpriteNodeは、init(edgeLoopF​​rom :)とスタックしています - SKPhysicsBody

class Floor: SKNode { 
    override init() { 
     super.init() 
     //let edgeFrame = CGRect(origin: CGPoint(x: 1,y: 1), size: CGSize(width: 1078, height: 1950)) 
     //self.physicsBody = SKPhysicsBody(edgeLoopFrom: edgeFrame) 

     let borderBody = SKPhysicsBody(edgeLoopFrom: self.frame) 
     borderBody.friction = 0 
     self.physicsBody = borderBody 

     // Apply a physics body to the node 
     // self.physicsBody?.isDynamic = false 

     // Set the bit mask properties 
     self.physicsBody?.categoryBitMask = floorCategory 
     self.physicsBody?.contactTestBitMask = nailDropCategory 
     self.physicsBody?.collisionBitMask = balloonCategory 
    } 

    required init?(coder aDecoder: NSCoder) { 
     fatalError("init(coder:) has not been implemted") 
    } 
} 

は、私は基本的にSKSpriteNodeの画面の上部に開始し、それが「床」をタッチし、自身を削除し、再度先頭から再開します下に行くことを落下持っています。私が持っている問題は、私のすべてのSKSpriteNodeが画面の枠の周りで境界線を越えずに上に止まり続けることです。アプリケーションに特定のノードを無視してそれらを受け入れるように指示するにはどうすればよいですか?助けをよろしく!ここで


何が起こっている左右の画面上ではなく、それだけでedgeLoop

if let accelerometerData = motionManager.accelerometerData { 
      if UIDevice.current.orientation == UIDeviceOrientation.landscapeLeft { 
       balloon.physicsBody?.velocity = CGVector(dx: accelerometerData.acceleration.x * -500.0, dy: 0) 
      } else { 
       balloon.physicsBody?.velocity = CGVector(dx: accelerometerData.acceleration.x * 500.0, dy: 0) 
       } 
      } 
     } 

答えて

5

せずに画面の側面から落ちる動いているオブジェクトは、あなたのオブジェクトがヒットしているということですエッジループの上部境界線であり、シーンに入ることができない。

エッジループが絶対に必要な場合は、これを行うにはいくつかの方法があります。ループをシーンよりも長く伸ばし、ループ内のオブジェクトを可視領域の上に作成することをお勧めします。しかし、あなたが実際に側にループを必要としているという兆候は、エッジループ検出を取り除くことだけです。

シーンの幅で100pxの高さで、物理ボディをタイプfloorCategoryにするボックスを作成します。このボックスを画面の下部の50ピクセル下に置きます。あなたのフロアスプライトボックスのアンカーポイントが0.5,0.5であると仮定すると、これはスクリーンの下のボックスを隠し、ボックスの上部はスクリーンの底面と同じ位置になります。

オブジェクトが画面の下部に当たったことを検出できるようになりました。上部のエッジループを通過することを心配する必要がなくなりました。

OR

ループがあろう伸長の例...

あなたがない画面に、エッジにループを適用するために、画面(画像の緑色の境界)よりも高い矩形を作成しますサイズ自体

enter image description here

+0

1つの問題は、私は基本的に上から落下物をかわすディスプレイの下部にSKSpriteNodeイメージがあります。 Xcode 9をアップデートしてiPhone Xのためにアプリケーションを更新しなければならなかったので、底のオブジェクトがスクリーンから外れないように、ちょうど正直にedgeLoopを持っています。スクリーンの側面は、オブジェクトが画面の上から落ちたときにそれを検出し、「フロア」に当たった底面に移動して取り除きますが、わかりません。あなたの答えはとても役に立ちました! – Dewan

+0

ループを伸ばすための画像が追加されました。それが役に立ったら –

+0

Robについて話していますが、基本的にはフレーム全体の境界線を作成するのではなく、画面。これは、このボックスは、自分のiPhoneを左または右に傾けると、画面の下にあるSKSpriteNodeイメージを画面の下に置く(Not Under)ことに役立ちます。もし私が何らかの方法でそのノードをスクリーンに留め置き、フレーム全体を囲むようにして、その代わりに底部でこのようにしたいのですが – Dewan

関連する問題