【发布时间】:2016-11-17 08:11:44
【问题描述】:
所以在我的 Space Invaders 游戏中,所有碰撞都运行良好,直到我添加了一个由 edgeChainFromPath 创建的物理体,这是一条代表地面的单线(从 2 个点创建的 SKShapeNode)。现在我的入侵者炸弹(通过 SKAction 移动)在落地时会发出通知,但我的入侵者(通过手动更新其位置移动到update())没有。我的飞船导弹(也由 SKAction 移动)在联系入侵者时会发出通知。
问题:如果一个physicsBody被手动移动并与另一个physicsBody接触,didBeginContact不被调用吗? (所有物理交互 - 位掩码、委托等 - 均已正确设置)。我认为答案是“不,不是”,因为这是唯一的解释,并且可以想象 Sprite/Kit 可能如何工作。 IE。当 SK 引擎自己移动一个节点并意识到它的物理体被绘制在另一个物理体之上时,就会发生接触。
编辑 - 刚刚意识到我的场景中有其他物理实体是静止的,并且入侵者确实会与之发生碰撞,所以这不是 SKAction 的事情。不同之处可能是我添加的新节点是属于 SKShapeNode 的基于边缘的主体,而不是 SKSPriteNode 的基于体积的主体,但我可以找到的文档中没有任何内容表明这不应该工作.
新问题:手动移动的基于体积的物体不会与静止的基于边缘的物体发生碰撞吗?
【问题讨论】:
-
嗨史蒂夫,如果您同时使用 SKAction 和物理交互/碰撞(不推荐),很难帮助您,特别是如果您涉及更新方法但没有代码我不知道所以我可以错了。
-
@AlessandroOrnano - 这不是我想象的那样 - 请参阅我的编辑。我一直在向这段代码添加正文并遵循标准程序 - 分配类别,设置位掩码,向 didBeginContact 添加测试,到目前为止一切都在第一次工作,所以我的底层代码很好。我要将新的基于边缘的主体更改为基于体积的主体,看看是否会有所改变。
-
您当前的位掩码设置是什么,您是否在开始联系时过滤掉了任何内容?
-
我所有的位掩码都检出,我的 checkPhysics() 例程告诉我入侵者接触了地面。入侵者与他们进入的其他物理体接触,其他物理体与地面接触。我目前的理论是,这是因为地面是一个非常薄的基于边缘的主体,基于体积的主体直接放置在其上,所以我需要检查一下。
-
您确定物理交互设置正确吗?
标签: ios swift sprite-kit collision-detection