2017-12-12 27 views
2

아래에 "Floor"라는 별도의 클래스가 있습니다.SKSpriteNode init (edgeLoopFrom :) - 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가 화면의 테두리 주위로 흘러 내리지 않고 멈추는 것을 계속한다는 것입니다. 애플리케이션에 특정 노드를 무시하고 들여 보내라고 어떻게 말할 수 있습니까? 어떤 도움을 주셔서 감사합니다! 여기


은 화면의 왼쪽 이동 객체와 권리이지만 단지

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

어떤 일이 일어나고 것은 당신의 객체가 타격되어있는의 Edge loop하지 않고 화면의 측면에서 떨어진다 가장자리 루프의 상단 경계선이며 장면으로 만들 수 없습니다.

측면에서 가장자리 루프가 절대적으로 필요한 경우이 작업을 수행 할 수있는 여러 가지 방법이 있습니다. 루프보다 장면이 더 길고 루프 내부에서 보이지만 보이는 영역 위에 개체를 만드는 것이 좋습니다. 그러나 당신이 실제로 내가 측면 루프를 필요로한다는 어떠한 표시도하지 않았다면 에지 루프 탐지를 없앨 수 있습니다.

장면 너비 인 상자를 만들고 100px 높이라고 입력하고 floorCategory 유형의 물리 구조체를 놓습니다. 이 상자를 화면 하단에 50 픽셀 놓습니다. 바닥 스프라이트 상자의 앵커 포인트가 0.5, 0.5라고 가정하면 화면 아래의 상자가 숨겨지고 상자 위쪽이 화면 아래쪽에 배치됩니다. 당신의 객체가 화면 하단에 충돌하고 더 이상이 상단 가장자리 루프 통과에 대해 걱정할 필요가 없습니다 때

이제 감지 할 수있을 것입니다. 당신은 (이미지에 녹색 테두리) 화면보다 키가 사각형을 만들

또는

루프가 될 것 신장의 예는 없습니다 ... 화면에,에 가장자리 루프를 적용하기 크기 자체가

enter image description here

+0

한 문제는 내가 기본적으로 상단에서 떨어지는 개체를 블리치 화면 하단 상에 SKSpriteNode 이미지를 가지고있다. Xcode 9를 업데이트하고 iPhone X 용 내 응용 프로그램을 업데이트했기 때문에 bottomLeop이 바로 화면에서 벗어나지 않도록 정직하게 edgeLoop을가집니다. 내 노드를 떠나지 못하게하는 방법 화면의 측면과 함께 개체가 화면의 상단에서 떨어지는 때 바닥에 떨어지는 "바닥"을 제거하고 제거하지만 나는 그것을 알아낼 수 없습니다. 귀하의 대답은 매우 도움이되었다! 그게 내가 당신이 기본적으로 대신 전체 프레임 주위에 경계를 만드는, 롭 무슨 말을하는지 얻을 – Dewan

+0

내가 루프 연신에 대한 이미지를 추가했습니다, 난 그냥 맨 아래에 그것을 할 필요가있을 것이다 화면. 이것은이 상자가 화면 (안 아래) 그게 내가 내 아이폰을 왼쪽이나 오른쪽으로 그게 내가 할 수있는 노드를 설정하는 방법이기 때문에 기울 화면을 슬라이드의 맨 아래에 내가 가지고 SKSpriteNode 이미지를 유지하는 데 도움이된다. 롭은 다른 사람이다), 나는 그 노드를 설정하는 방법 일부는 전체 프레임 주위의 Edge loop없이 하단에 화면에 머물 수 있다면 대신 나는이 방법 –

+0

도움이된다면 – Dewan