【发布时间】:2016-01-18 08:51:17
【问题描述】:
我有一个基于碰撞的游戏,里面有导弹和炸弹。现在一切正常,只有 1 次碰撞,它会从屏幕上删除节点。
虽然我希望能够让我的“炸弹”中的第一个炸弹更难摧毁,所以我想要求它被击中两次。我该怎么做?
这是炸弹
func enemies() {
let bomb1 = SKSpriteNode(imageNamed: "Bomb1")
let bomb2 = SKSpriteNode(imageNamed: "bomb2")
let bomb3 = SKSpriteNode(imageNamed: "Bomb3")
let enemy = [bomb1, bomb2, bomb3]
// Enemy Physics
for bomb in enemy {
bomb1.size = CGSize(width: 55, height: 55)
bomb2.size = CGSize(width: 55, height: 70)
bomb3.size = CGSize(width: 30, height: 30)
bomb.physicsBody = SKPhysicsBody(circleOfRadius: bomb.size.width / 4)
bomb.physicsBody?.categoryBitMask = PhysicsCategory.enemy
bomb.physicsBody?.collisionBitMask = PhysicsCategory.missile | PhysicsCategory.airDefense
bomb.physicsBody?.contactTestBitMask = PhysicsCategory.missile | PhysicsCategory.airDefense
bomb.physicsBody?.affectedByGravity = false
bomb.physicsBody?.dynamic = true
bomb1.name = "enemy1"
bomb2.name = "enemy2"
bomb3.name = "enemy3"
}
这是炸弹击中导弹时调用的函数。
func collisionWithMissile(enemy : SKSpriteNode, missile : SKSpriteNode) {
enemy.physicsBody?.dynamic = true
enemy.physicsBody?.affectedByGravity = true
missile.physicsBody?.affectedByGravity = true
enemy.physicsBody?.mass = 10.0
missile.physicsBody?.mass = 5.0
enemy.removeAllActions()
missile.removeAllActions()
enemy.removeFromParent()
missile.removeFromParent()
enemy.physicsBody?.contactTestBitMask = 0
enemy.physicsBody?.collisionBitMask = 0
enemy.name = nil
score++
scoreLbl.text = "\(score)"
}
这可能有助于解决我遇到的错误
func didBeginContact(contact: SKPhysicsContact) {
if contact.bodyA.node != nil && contact.bodyB.node != nil {
let firstBody = contact.bodyA.node as! Bomb
let secondBody = contact.bodyB.node as! SKSpriteNode
// Bomb1 **********
if ((firstBody.name == "enemy1") && (secondBody.name == "missile")) {
collisionWithMissile(firstBody, missile: secondBody)
atomicExplosion(contact.bodyA.node!.position)
missileExplosion(contact.bodyB.node!.position)
}
【问题讨论】:
-
您可以使用字符串插值来简化
enemies方法。例如,您可以使用let bomb = SKSpriteNode(imageNamed:"Bomb\(i)")在 for 循环中创建每个炸弹,并使用bomb.name = "enemy\(i)"指定名称,其中i(从 1...3)是循环控制变量。
标签: swift sprite-kit collision-detection skphysicsbody sknode