我在swift 3上使用Sprit-kit我的问题是在向一个节点射击子弹后(我称之为Planet)我不希望该节点(Planet)消失我想只有子弹从场景中消失并且我的节点(Planet)仍然继续运行,如果那个节点(Planet)与主播放器发生冲突,它们都会消失(这里没有问题)。我的问题是当子弹与那个节点发生碰撞时,它们都消失了在碰撞功能我刚刚写了Bullet.removefromParent()这里是我的代码(我希望保持我的星球与子弹碰撞后我的子弹从场景中删除):
func CollitionPlannetWithBullet(_ Bullet : SKSpriteNode, Planet : SKSpriteNode){
Bullet.removeFromParent()
}
这是行星和子弹的开始接触功能的代码:
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 :(得分:0)
我发现执行此操作的最佳方法是升级SKSpriteNode,然后允许您使用if来使用其一个子类函数处理碰撞中的每个节点。
我建议阅读子类和多态,因为它会使你的代码更清晰,并为你构建的东西提供更多的灵活性。
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)
}
}
我希望这有用。
祝你好运, 亡灵地球