2016-06-03 8 views
1

, 나는 SpriteKit 랩핑 해제 옵션 오류 (스위프트) 내 프로젝트를 실행할 때마다

ground.physicsBody!.dynamic = false 

가 여기이 미리보기와 함께 갈 실행하고 전체 코드입니다 ... 라인에 잘못된 명령 오류가 발생합니다. 나는 무슨 일이 일어나고 있는지 모르겠다. 나는 선택사에 대한 많은 경험이 없다.

코드 :

var ground = SKSpriteNode() 
ground.position = CGPointMake(0, 0) 
ground.physicsBody = SKPhysicsBody(rectangleOfSize: CGSizeMake(self.frame.size.width, 30)) 
let groundTexture = SKTexture(imageNamed: "Red.png") 
ground = SKSpriteNode(texture: groundTexture) 
ground.physicsBody!.dynamic = false 
ground.physicsBody?.allowsRotation = false 

ground.physicsBody!.categoryBitMask = ColliderType.Object.rawValue 
ground.physicsBody!.contactTestBitMask = ColliderType.Object.rawValue 
ground.physicsBody!.collisionBitMask = ColliderType.Object.rawValue 
self.addChild(ground) 

답변

5

당신은 그것의 물리 몸을 만든 후ground을 초기화하기 때문에 새 개체 물리학 본체 따라서 전무 오류를 보여주는이없는 재 이다.? 또는 if let에 하나 안전 않은 랩을 사용하는 것입니다 선택적 항목을 풀기 때 발견 전무의 오류에 직면 할 때

는 주석, 일반적인 관행에 따라로서

let groundTexture = SKTexture(imageNamed: "Red.png") 
var ground = SKSpriteNode(texture: groundTexture) 
ground.position = CGPointMake(0, 0) 
ground.physicsBody = SKPhysicsBody(rectangleOfSize: CGSizeMake(self.frame.size.width, 30)) 
ground.physicsBody!.dynamic = false 
ground.physicsBody?.allowsRotation = false 

ground.physicsBody!.categoryBitMask = ColliderType.Object.rawValue 
ground.physicsBody!.contactTestBitMask = ColliderType.Object.rawValue 
ground.physicsBody!.collisionBitMask = ColliderType.Object.rawValue 
self.addChild(ground) 

에 코드를 변경

. 이 시나리오에서는 다음과 같이 구현할 수 있습니다.

if let physicsBodyObject = ground.physicsBody { 
    physicsBodyObject.dynamic = false 
    physicsBodyObject.allowsRotation = false 
    //other code 
} 
+1

답변은 정확하지만 향후 독자를위한 약간의 비틀기를 제안 할 것입니다. 처음부터 충돌을 피하려면 모든 것을 교체해야합니다! 와? 언제든지 가능할 때. 물리학자가 있다는 것을 알고 있더라도 랩핑을 강제 실행하는 것이 가장 좋은 방법은 아닙니다. – crashoverride777

+1

또는 더 나은 것은 물리 물리 체를 개별적으로 생성 한 다음 노드를 구성한 후에 노드에 할당하는 것입니다. – Hamish