2016-09-24 2 views
0

신속한 3에서 Sprit-kit 사용 내 질문은 한 노드 (총칭이라고도 함)에 총알을 쏘은 후입니다. 노드 (행성)가 사라지는 것을 원하지 않습니다. 나는 총알이 장면에서 사라지고 내 노드 (행성)가 계속 실행되고 그 노드 (행성)가 주 플레이어와 충돌하면 둘 다 사라진다. (여기에는 문제가 없다.) 내 문제는 탄환이 충돌 할 때이다.SpritKit swift 3 물리 구조 충돌 및 하나의 노드 만 제거

func CollitionPlannetWithBullet(_ Bullet : SKSpriteNode, Planet : SKSpriteNode){ 
    Bullet.removeFromParent() 
} 

을하고 이것이다 : 난 그냥 Bullet.removefromParent을 (작성 방법 적 충돌 함수에서 둘 다 여기) 사라 노드는 내 코드 (내가 총알과 충돌 장면에서 내 총알 제거 후 내 행성을 유지하려는 경우)입니다 코드가 contact functio를 시작했습니다. n 개의 행성과 총알 :

if ((firstBody.categoryBitMask == physicsCatagory.Planet) && 
    (secondBody.categoryBitMask == physicsCatagory.Bullet)) || 
    ((firstBody.categoryBitMask == physicsCatagory.Bullet) && 
    (secondBody.categoryBitMask == physicsCatagory.Planet)) { 
     CollitionPlannetWithBullet(firstBody.node as! SKSpriteNode, Planet: secondBody.node as! SKSpriteNode) 
} 
+0

명세서, 당신은 body1 또는 body2가 총알 수 있지만'CollitionPlannetWithBullet'에 수 있다고 경우 (맞춤법 오류?) 만 body1이 말하는 총알. 시도하고 일관성을 유지하십시오 – Knight0fDragon

답변

0

나는이 다음의 하나 개의 서브 클래스 함수를 사용하여 충돌의 각 노드를 치료 할 경우 사용할 수있는 SKSpriteNode을 sublcass하는 것입니다 할 수있는 가장 좋은 방법을 발견했습니다.

서브 클래 싱과 다형성에 대한 정보는 코드를 훨씬 명확하게 만들고 물건을 만드는 방법에있어 훨씬 더 많은 유연성을 제공하므로 읽어 보시기 바랍니다.

func evalChainGun_Drone(_ contact: SKPhysicsContact){ 
    let nodeA = contact.bodyA.node 
    let nodeB = contact.bodyB.node 

    //A Items 
    if let shotA = nodeA as? ChaingunBullet { 
     shotA.damage()} 

    if let droneA = nodeA as? Drone { 
     droneA.weaponDamage(droneA.HP_Class, damage: 1, node: droneA, contactLocation: contact.contactPoint) 
    } 

    //B Items 
    if let shotB = nodeB as? ChaingunBullet { 
     shotB.damage()} 

    if let droneB = nodeB as? Drone { 
     droneB.weaponDamage(droneB.HP_Class, damage: 1, node: droneB, contactLocation: contact.contactPoint) 
    } 
} 

도움이되기를 바랍니다.

안부, 언데드 지구

당신이 자신을 혼동
+0

이것은 어떻게 도움이됩니까? – Knight0fDragon

+0

더하기, 다음을 참조하십시오 : https://en.wikipedia.org/wiki/Don%27t_repeat_yourself – Knight0fDragon

+0

spritekit의 문제점은 어느 노드가 어느 연락처인지 전혀 알 수 없으므로 두 조건 모두를 처리해야한다는 것입니다 . 중복 코드가 모범 사례가 아닐 수도 있다는 것에 동의하지만 Swift와 함께하는 여우에 대해서는 확실하지 않습니다. –