【发布时间】:2021-11-26 01:47:22
【问题描述】:
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
guard let touch = touches.first else { return}
let location = touch.location(in: self)
lastTouchPosition = location
let bullet = SKSpriteNode(imageNamed: "bullet")
bullet.name = "bullet"
bullet.position = player.position
bullet.physicsBody?.categoryBitMask = CollisionTypes.enemy.rawValue
bullet.physicsBody?.contactTestBitMask = CollisionTypes.enemy.rawValue
bullet.physicsBody?.collisionBitMask = CollisionTypes.enemy.rawValue
bullet.size = CGSize(width: 40, height: 30)
bullet.physicsBody = SKPhysicsBody(circleOfRadius: bullet.size.width / 2)
addChild(bullet)
}
我用 SKPhysicsBody 为我的子弹添加了碰撞,它射击并与我的敌人相撞。然而,每次我触摸屏幕射击时,我的球员都会被击退,几乎就像它有后坐力一样。如果我确实从子弹中移除 SKPhysicsBody,一切正常,但我的子弹只会穿过我的敌人。
player.physicsBody?.categoryBitMask = CollisionTypes.player.rawValue
player.physicsBody?.contactTestBitMask = CollisionTypes.enemy.rawValue
player.physicsBody?.collisionBitMask = CollisionTypes.enemy.rawValue
player.physicsBody?.collisionBitMask &= ~CollisionTypes.bullet.rawValue
playerNode.physicsBody?.restitution = -1.0
playerNode.physicsBody?.friction = 0.0
playerNode.physicsBody?.angularDamping = 0.0
playerNode.physicsBody?.linearDamping = 0.5
【问题讨论】:
-
这取决于你如何为每个角色分配物理类别。
-
您需要为玩家显示物理体的代码以及您的
didBegin(contact:)。从你所说的来看,玩家似乎正在与子弹相撞。
标签: swift sprite-kit