说我有三个精灵;一个玩家,一个三角形和一个正方形。
三角形和正方形节点各分配一个SKPhysicsBody
,而播放器节点具有两个(大小不同的内部和外部)。
内部表示只与三角形接触,而外部表示与正方形接触。
我已将每个物理主体分配给玩家节点:
playerNode.physicsBody = SKPhysicsBody(bodies: [inner, outer])
,并给每个人起一个名字:
inner.node?.name = "inner"
outer.node?.name = "outer"
但是,在didBegin
中的任何一个联系时,打印:
contact.bodyB.node?.physicsBody?.node?.name
显示nil,或者显示播放器节点的名称(如果有的话)。这与打印不同:
contact.bodyB.node?.name
这是针对播放器节点本身的。如果一个物理物体有自己的名称,为什么我不能识别它以便与另一个物理物体区分开?
答案 0 :(得分:0)
这是因为您实际上并没有完成您想做的事情:
三角形和正方形节点均分配有SKPhysicsBody 而玩家节点有两个-内部和外部不同 大小。
当您尝试使用此行将2个物理实体分配给玩家节点时:
playerNode.physicsBody = SKPhysicsBody(bodies: [inner, outer])
您实际上所做的是创建一个新的物理实体(它是物理实体inner
和outer
的并集),并分配了这个新的物理实体(没有名称),并为其分配了该物理实体。到您的播放器节点。
https://developer.apple.com/documentation/spritekit/skphysicsbody/1519736-init
通过执行一组的结合来创建物理物体 基于体积的物理物体。
所以玩家仍然只有一个物理实体(既不是内部也不是外部),这是一个节点可以拥有的全部。
一种可行的方法是创建2个新节点-playerInner
和playerOuter
,也许每个都有自己的物理实体-并将它们连接起来以创建玩家节点。 (playerInner
可以是playerOuter
的子节点)