基于体积的 physicsBody 被手动移动而不接触基于边缘的 physicsBody
volume-based physicsBodies being moved manually not contacting edge-based physicsBody
所以在我的 Space Invaders 游戏中,所有碰撞都运行良好,直到我添加了一个由 edgeChainFromPath
创建的物理体,它是代表地面的一条线(一个 SKShapeNode 从 2 创建点)。现在我的入侵者炸弹(通过 SKAction 移动)在落地时发出通知,但我的入侵者(通过手动更新位置移动 update()
)却没有。我的飞船导弹(也由 SKAction 移动)在接触入侵者时会发出通知。
问题:如果一个physicsBody 被手动移动并与另一个physicsBody 接触,didBeginContact
不会被调用吗? (所有物理交互 - 位掩码、委托等 - 均已正确设置)。我认为答案是“不,不是”,因为这是唯一的解释,并且可以理解 Sprite/Kit 可能是如何工作的。 IE。当 SK 引擎本身移动一个节点并意识到它的 physicsBody 被绘制在另一个 physicsBody 之上时,就会发生接触。
编辑 - 刚刚意识到我的场景中还有其他静止的 physicsBody,入侵者确实与之发生碰撞,所以这不是 SKAction 的事情。不同之处可能是我添加的新节点是属于 SKShapeNode 的基于边缘的主体,而不是 SKSPriteNode 的基于体积的主体,但我在文档中找不到任何内容表明这不应该工作.
新问题:手动移动基于体积的物体不会与基于边缘的静止物体发生碰撞吗?
好的 - 我的错。入侵者的物理体有dynamic=false
。其他所有精灵都是动态的,因此所有其他碰撞都有效。我的新形状是基于边缘的主体,它也是 dynamic=false。
进行了一次更改,一切正常。我需要更新我的 checkPhysics()
例程来对此进行测试。
编辑:我真的应该早点看到这个 - checkPhysics()
没有打印入侵者在接触地面时通知,我只是把它归结为一个小故障,稍后会修复。而 checkPhysics() 故意不报告具有 dynamic=false
的节点。我想当我写这个函数时,我假设你故意设置 dynamic=false 不参与 collision/contact 检测。我应该更改它以打印警告。
所以在我的 Space Invaders 游戏中,所有碰撞都运行良好,直到我添加了一个由 edgeChainFromPath
创建的物理体,它是代表地面的一条线(一个 SKShapeNode 从 2 创建点)。现在我的入侵者炸弹(通过 SKAction 移动)在落地时发出通知,但我的入侵者(通过手动更新位置移动 update()
)却没有。我的飞船导弹(也由 SKAction 移动)在接触入侵者时会发出通知。
问题:如果一个physicsBody 被手动移动并与另一个physicsBody 接触,didBeginContact
不会被调用吗? (所有物理交互 - 位掩码、委托等 - 均已正确设置)。我认为答案是“不,不是”,因为这是唯一的解释,并且可以理解 Sprite/Kit 可能是如何工作的。 IE。当 SK 引擎本身移动一个节点并意识到它的 physicsBody 被绘制在另一个 physicsBody 之上时,就会发生接触。
编辑 - 刚刚意识到我的场景中还有其他静止的 physicsBody,入侵者确实与之发生碰撞,所以这不是 SKAction 的事情。不同之处可能是我添加的新节点是属于 SKShapeNode 的基于边缘的主体,而不是 SKSPriteNode 的基于体积的主体,但我在文档中找不到任何内容表明这不应该工作.
新问题:手动移动基于体积的物体不会与基于边缘的静止物体发生碰撞吗?
好的 - 我的错。入侵者的物理体有dynamic=false
。其他所有精灵都是动态的,因此所有其他碰撞都有效。我的新形状是基于边缘的主体,它也是 dynamic=false。
进行了一次更改,一切正常。我需要更新我的 checkPhysics()
例程来对此进行测试。
编辑:我真的应该早点看到这个 - checkPhysics()
没有打印入侵者在接触地面时通知,我只是把它归结为一个小故障,稍后会修复。而 checkPhysics() 故意不报告具有 dynamic=false
的节点。我想当我写这个函数时,我假设你故意设置 dynamic=false 不参与 collision/contact 检测。我应该更改它以打印警告。