【发布时间】:2018-05-03 01:29:21
【问题描述】:
不确定是哪一部分的问题。我正在做一个 spriteKit 射击游戏,但碰撞不起作用。宇宙飞船没有被摧毁。
一定和某处的碰撞有关……
射弹只是稍微将敌人移动过来,但不会摧毁他们。
struct physicsCategory {
static let player : UInt32 = 1
static let enemy : UInt32 = 2
static let projectile : UInt32 = 3
}
func didBeginContact(contact: SKPhysicsContact) {
let firstBody : SKPhysicsBody = contact.bodyA
let secondBody : SKPhysicsBody = contact.bodyB
if ((firstBody.categoryBitMask == physicsCategory.projectile) && (secondBody.categoryBitMask == physicsCategory.enemy) || (firstBody.categoryBitMask == physicsCategory.enemy) && (secondBody.categoryBitMask == physicsCategory.projectile)) {
projectileCollision(enemyTemp: firstBody.node as! SKSpriteNode, projectileTemp: secondBody.node as! SKSpriteNode)
}
if ((firstBody.categoryBitMask == physicsCategory.enemy) && (secondBody.categoryBitMask == physicsCategory.player) || (firstBody.categoryBitMask == physicsCategory.player) && (secondBody.categoryBitMask == physicsCategory.enemy)) {
enemyPlayerCollision(enemyTemp: firstBody.node as! SKSpriteNode, playerTemp: secondBody.node as! SKSpriteNode)
}
}
///////////
func projectileCollision(enemyTemp: SKSpriteNode, projectileTemp: SKSpriteNode){
enemy.removeFromParent()
projectile.removeFromParent()
score = score + 1
updateScore()
}
////////////
func enemyPlayerCollision(enemyTemp: SKSpriteNode, playerTemp: SKSpriteNode) {
mainLabel.fontSize = 50
mainLabel.alpha = 1.0
mainLabel.text = "Game Over"
player.removeFromParent()
isAlive = false
waitThenMoveToTiltleScreen()
}
【问题讨论】:
-
能否分享一下为精灵设置 physicBodies 和 collisionBitMask 的代码?您的
PhysicsCategory结构似乎表明您对 bitMask 的工作方式并不完全满意... -
func spawnProjectile(){ projectile = SKSpriteNode(color: offWhiteColor, size: projectileSize) projectile.size = projectileSize projectile.position = CGPoint(x: (player.position.x), y: (player .position.y)) projectile.physicsBody = SKPhysicsBody(rectangleOf: projectile.size) projectile.physicsBody?.affectedByGravity = false projectile.physicsBody?.categoryBitMask = PhysicsCategory.projectile projectile.physicsBody?.contactTestBitMask = PhysicsCategory.enemy projectile.physicsBody? .isDynamic = false
-
嗨 T.Benjamin 抱歉,我只能粘贴这么少量的代码。但我在下面给出了答案/问题。只是一些射弹正在穿过敌人,但不是全部。我猜这是龙骑士所说的“需要处理你的第一个身体是射弹,你的第二个身体是敌人的情况”但我似乎不能这样做,因为我是 spriteKit 的新手。
标签: ios swift sprite-kit