Ios Sprite套件中的SKShapeNode碰撞检测未检测到碰撞
我正在尝试实现Ios Sprite套件中的SKShapeNode碰撞检测未检测到碰撞,ios,swift,sprite-kit,collision-detection,Ios,Swift,Sprite Kit,Collision Detection,我正在尝试实现SKShapeNode(圆形节点)和SKShapeNode(方形节点)之间的碰撞检测,就像应用程序“Snake VS Blocks”一样 下面是我创建节点的代码片段 蛇的创造 块创建 以下是上述代码结果的图像: 我的第一个问题是,我不知道为什么,但当我启用skview显示物理时, view.showsPhysics=true 我发现我的观点不正确 第二,我已确认也将联系代表 physicsWorld.contactDelegate = self 但是我的 didBegin(_
SKShapeNode
(圆形节点)和SKShapeNode
(方形节点)之间的碰撞检测,就像应用程序“Snake VS Blocks”一样
下面是我创建节点的代码片段
蛇的创造
块创建
以下是上述代码结果的图像:
我的第一个问题是,我不知道为什么,但当我启用skview显示物理时,
view.showsPhysics=true
我发现我的观点不正确
第二,我已确认也将联系代表
physicsWorld.contactDelegate = self
但是我的
didBegin(_ contact: SKPhysicsContact)
不会被触发
碰撞检测代码:
扩展游戏场景:SKPhysicContactDelegate{
func didbegen(uu联系人:skphysiccontact){
var firstBody:SKPhysicsBody
var第二个主体:SKPhysicsBody
如果contact.bodyA.categoryBitMask
在stackoverflow搜索类似问题时,我检查了其他问题,但没有找到任何解决方案。其中一个或两个“isDynamic”都应该是正确的。否则,它们将表现得像一面墙,永远不会参与物理模拟。其中一个或两个“isDynamic”都应该为真。否则,它们的行为将像一面墙,永远不会参与物理模拟。这很快。。我忘了我把两个身体都设置为假。你能告诉我为什么我的块的帧比你在上面的图像中看到的偏移量大一些吗?静止物理体的帧和节点的帧有不同的定位点。一个位于节点的中心(0.5,0.5),另一个位于一个顶点(0,0)。如果physics body处于模拟状态,physics world engine将更正其位置以匹配节点,并且您不会注意到差异。这很快。。我忘了我把两个身体都设置为假。你能告诉我为什么我的块的帧比你在上面的图像中看到的偏移量大一些吗?静止物理体的帧和节点的帧有不同的定位点。一个位于节点的中心(0.5,0.5),另一个位于一个顶点(0,0)。如果“物理体”处于模拟状态,则“物理世界引擎”将更正其位置以匹配节点,并且您不会注意到差异。
physicsWorld.contactDelegate = self
didBegin(_ contact: SKPhysicsContact)
extension GameScene: SKPhysicsContactDelegate {
func didBegin(_ contact: SKPhysicsContact) {
var firstBody: SKPhysicsBody
var secondBody: SKPhysicsBody
if contact.bodyA.categoryBitMask < contact.bodyB.categoryBitMask {
firstBody = contact.bodyA //snake
secondBody = contact.bodyB //block
} else {
firstBody = contact.bodyB //block
secondBody = contact.bodyA //snake
}
if ((firstBody.categoryBitMask & PhysicsCategory.snake != 0) &&
(secondBody.categoryBitMask & PhysicsCategory.block != 0)) {
if let snake = firstBody.node as? SKShapeNode,
let block = secondBody.node as? SKShapeNode {
snakeDidCollideWithBlock(snake: snake, block: block)
}
}
}
func snakeDidCollideWithBlock(snake: SKShapeNode, block: SKShapeNode) {
print("Hit")
block.removeFromParent()
}
}