【发布时间】:2018-01-26 21:23:52
【问题描述】:
我目前正在从事 2D 无尽的跑步者。在游戏中你可以改变角色的状态,然后穿过物体。但是如果玩家在一个物体里面,他不应该能够变回另一个状态,直到他离开这个物体。
目前我正在像这样检查这个状态:
if((thePlayer.physicsBody?.allContactedBodies())! != [])
{
for object in (thePlayer.physicsBody?.allContactedBodies())!
{
guard let node = object.node
else
{
return
}
// Player IN a Block?
if node.frame.minX < thePlayer.frame.maxX - 1 &&
node.frame.maxX > thePlayer.frame.minX + 1 &&
node.frame.maxY > thePlayer.frame.minY + 1 &&
node.frame.minY < thePlayer.frame.maxY - 1
{
//Player is IN a Block
isInBlock = true
}
}
}
我对那个解决方案不太满意,因为我通过 SKReferenceNode 添加了新的关卡序列,而该节点中的关卡对象不会响应这种检查方式。
我认为这是因为 SKReferenceNode 内的节点使用 SKReferenceNode 的坐标系,而玩家使用主坐标系。
无论如何,我不确定这是否是最好的解决方案。 有什么更好的方法来做到这一点? 或者我怎样才能至少解决 SKReferenceNode 问题?
编辑: 我改变了我的代码结构,所以现在我只在玩家点击屏幕时检查碰撞。 这仍然留下了关于坐标系和 SKReferenceNode 的问题。 我仔细看了看,现在我确定,这就是问题所在。
如何获取 SKReferenceNode 内的节点在主场景坐标系中的位置?
【问题讨论】:
标签: ios swift sprite-kit 2d collision-detection