【问题标题】:SpriteKit and particle collisionSpriteKit 和粒子碰撞
【发布时间】:2014-06-25 07:38:42
【问题描述】:

我有一个粒子发射器,我想在粒子碰撞一些物理物体时检测它。 在 SpriteKit API 中是否有本地方法可以做到这一点,还是我需要“作弊”?

【问题讨论】:

    标签: sprite-kit


    【解决方案1】:

    单个粒子不能碰撞。不是物理,不是任何其他方式。您甚至无法获得有关单个粒子的任何信息 - 您无法访问它的位置、旋转、速度……什么都没有。

    如果您想“作弊”,则必须使用精灵模拟粒子发射器,并使用动作或手动为精灵设置动画。但是请记住,这比粒子发射器的效率要低得多。

    此外,如果我们谈论的“粒子”通常意味着屏幕上的数十个甚至数百个粒子,那么如果您要使用附加了物理实体的 sprite 对它们进行建模,那么物理处理和碰撞检测的数量很快就会变得非常昂贵.在你走这条路之前做一个性能测试。

    【讨论】:

    • 好的,非常感谢您的详细回答!难道没有其他选择吗?假设我想模拟爆炸,我正在使用粒子来做到这一点,并且我想伤害任何被它触及的角色,有没有其他方法可以做到这一点(即使我使用完全不同的东西粒子发射器)
    • 就像我说的,如果你制作爆炸的粒子精灵,你可以碰撞它们,但你不能像使用粒子发射器这样的基于规则的系统时那样巧妙地为它们设置动画。
    【解决方案2】:

    粒子没有物理实体,因此它们不会与 Sprite Kit 的物理引擎发生碰撞

    【讨论】:

      【解决方案3】:

      您可以设置粒子发射器的物理体,就像为任何精灵节点设置它一样。然后您可以设置类别位掩码属性和接触测试位掩码。 didBeganContact 方法可以在之后检测到碰撞。

      【讨论】:

      • 谢谢!但它是否为每个粒子调用此方法?你认为即使你为你的粒子发射器设置了一个目标节点它也能工作?
      • 很遗憾,这行不通,因为粒子没有物理实体。
      【解决方案4】:

      每当两个物体相互接触时,就会调用didBegan contact。这是此方法如何工作的苹果参考链接:

      点击[这里](https://developer.apple.com/library/ios/documentation/SpriteKit/Reference/SKPhysicsContactDelegate_Ref/Reference/Reference.html#//apple_ref/occ/intfm/SKPhysicsContactDelegate/didBeginContact:"Apple iOS 开发者库")!

      【讨论】:

      • 谢谢,我试试看是否有效,因为虽然粒子是节点,但这些是特殊节点,有点不同。顺便说一句,您似乎是 StackOverflow 上的新手,所以她的建议是:如果您想添加其他信息,您可以通过编辑原始答案来做到这一点。如果有人像我刚才那样问你一个问题,你也可以直接在 cmets 中回答。 (通常你永远不会写两个答案)
      • 谢谢,我不知道。 :)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-28
      • 1970-01-01
      • 2023-04-03
      • 1970-01-01
      • 1970-01-01
      • 2022-01-12
      • 1970-01-01
      相关资源
      最近更新 更多