区分单个精灵上的多个物理物体

时间:2018-12-03 06:51:54

标签: swift sprite-kit skphysicsbody

说我有三个精灵;一个玩家,一个三角形和一个正方形。

三角形和正方形节点各分配一个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

这是针对播放器节点本身的。如果一个物理物体有自己的名称,为什么我不能识别它以便与另一个物理物体区分开?

1 个答案:

答案 0 :(得分:0)

这是因为您实际上并没有完成您想做的事情:

  

三角形和正方形节点均分配有SKPhysicsBody   而玩家节点有两个-内部和外部不同   大小。

当您尝试使用此行将2个物理实体分配给玩家节点时:

  

playerNode.physicsBody = SKPhysicsBody(bodies: [inner, outer])

您实际上所做的是创建一个新的物理实体(它是物理实体innerouter的并集),并分配了这个新的物理实体(没有名称),并为其分配了该物理实体。到您的播放器节点。

https://developer.apple.com/documentation/spritekit/skphysicsbody/1519736-init

  

通过执行一组的结合来创建物理物体   基于体积的物理物体。

所以玩家仍然只有一个物理实体(既不是内部也不是外部),这是一个节点可以拥有的全部。

一种可行的方法是创建2个新节点-playerInnerplayerOuter,也许每个都有自己的物理实体-并将它们连接起来以创建玩家节点。 (playerInner可以是playerOuter的子节点)