2017-10-03 7 views
0

저는 도서 3의 스위프트 3 개발 지침에 따라 간단한 플립형 게임을 만들고 있습니다. 나는 두 개의 SKSpriteNodes를 가지고 있는데, 하나는 플레이어이고 다른 하나는 플레이어에게 상처를 줄 수있는 정적 객체이다.플레이어 SKPhysicsBody가 다른 SKPhysicsBody 스위프트 4를 통과합니다. Xcode 9

플레이어 손상은 범주 BitMask를 통해 사용자 지정 연락처 논리를 통해 구현됩니다. 문제는 정적 객체의 categoryBitMask를 설정할 때 플레이어가 정적 객체와 접촉 할 때 사용자 정의 논리가 트리거되지만 플레이어가 이제 정적 객체를 통과 할 때입니다. 여기

는 초기화() 나는 isDynamic = 거짓 조건을 제거하면

init() { 
    super.init(texture: nil, color: .clear, size: initialSize) 
    let textureBody = textureAtlas.textureNamed("pierre-flying-3") 
    self.physicsBody = SKPhysicsBody(texture: textureBody, size: self.size) 
    self.physicsBody?.linearDamping = 0.9 
    self.physicsBody?.mass = 30 
    self.physicsBody?.allowsRotation = false 
    self.zPosition = 1 
    createAnimations() 
    self.run(soarAnimation, withKey: "soarAnimation") 
    self.physicsBody?.categoryBitMask = PhysicsCategory.hero.rawValue 
    self.physicsBody?.contactTestBitMask = PhysicsCategory.ground.rawValue | 
              PhysicsCategory.enemy.rawValue | 
              PhysicsCategory.coin.rawValue | 
              PhysicsCategory.powerUp.rawValue 
    self.physicsBody?.collisionBitMask = PhysicsCategory.ground.rawValue 
} 

다음 예 작동 플레이어와 정적 객체

정적 객체

init() { 
    super.init(texture: nil, color: .clear, size: initialSize) 
    createAnimations() 
    self.run(spinAnimation) 
    let startTexture = textureAtlas.textureNamed("blade") 
    self.physicsBody = SKPhysicsBody(texture: startTexture, size: initialSize) 
    self.physicsBody?.affectedByGravity = false 
    self.physicsBody?.isDynamic = false 
    self.physicsBody?.categoryBitMask = PhysicsCategory.enemy.rawValue 
    self.physicsBody?.collisionBitMask = ~PhysicsCategory.heroDamage.rawValue 
    self.zPosition = -9 
    } 

플레이어 모두를위한 기능입니다 그러나 객체는 더 이상 정적이 아닙니다. 개체의 질량을 늘리고 isDynamic = false를 제거하려고 시도했습니다. 하지만 이상한 이유로 IsDynamic = false 문을 포함하는 것과 동일한 효과가 있습니다

어떤 도움이 필요합니까? 감사합니다

편집 categoryBitMask의 열거 자리를 차지할 충돌 위해서는 동적을 할 요구를 충돌해야 두 노드의

enum PhysicsCategory:UInt32 { 
case hero = 1 
case heroDamage = 2 
case ground = 4 
case enemy = 8 
case coin = 16 
case powerUp = 32 
} 

답변

0

한 값. 그들 모두 정적 일 수는 없습니다.

+0

영웅은 기본적으로 isDynamic = true로 설정됩니다. 나는 단지 영웅 init()에 줄을 추가하려고 시도했다. 그리고 결과는 같다. – hoboBob

+0

PhysicsCategory-enum을 답에 추가 할 수 있습니까? 도움이 될 수도 있습니다. – Christoph