【问题标题】:Deforming a sprite until texture no longer contiguous - how to maintain contact -detection?使精灵变形直到纹理不再连续 - 如何保持接触检测?
【发布时间】:2016-09-19 12:05:23
【问题描述】:

仍在制作我的太空入侵者克隆,我想在屏幕底部添加可破坏的基地:

我已经想出了如何通过让炸弹和盾牌相互接触来修改盾牌的外观,然后在 didBegincontact 中,从炸弹爆炸的掩码和盾牌的当前纹理创建一个 SKCropNode 和然后使用视图的texture(from: node) 方法获取渲染纹理,并从新纹理更新盾牌的纹理和物理体。

但是 - 当盾牌的中心有一个洞,使得盾牌的纹理不再是连续的(例如图片中最左边的盾牌),生成的physicsBody 只覆盖左边的部分纹理。因此,不会检测到任何击中盾牌右侧的炸弹。

我怎样才能让我的盾牌分裂成多块并保持接触检测工作?

可能的解决方案:

  • 不知何故扫描新纹理并创建多个physicsBoies 使用分配给单个 SKSpriteNode SKPhysicsbody(bodies: [SKPhysicsBody])。如果,正如它所显示的那样, SKPhysicsBody 从纹理的左上角生成,然后 可能将纹理旋转 90 度 4 次以生成 4 物理体?
  • 使用某种 alpha 掩码(以便
    shiled 是明确的)并保持屏蔽的物理主体在
    原始形状,当调用 dBC 时,检查像素的颜色 在接触点/炸弹下方 - 如果他们“清楚”,则采取 不采取任何行动,让炸弹畅通无阻地落下,直到
    调用 didEndContact 表示炸弹已清除
    盾牌。

  • 在炸弹和盾牌之间使用一个简单的intersectsRect 然后检查炸弹下的像素颜色 - 如果清楚,不要做 任何东西。

================================================ ====

更新:请参阅下文,了解未拆分时精灵纹理损坏的工作情况。棕色底座是显示第一次损坏的原始底座(physicsBody 显示原始底座,纹理显示 dame)。绿色基地已经重新计算了它的物理体:

更新:纹理分割时的物理体见下文。棕色是原始盾牌,小凹痕是“新”伤害。 physicsBody 只映射到图像的左侧部分。

【问题讨论】:

  • 你应该只是使用 SKPhysicsBody(texture),每次你的盾牌纹理发生变化时,给它一个新的身体,如果它没有形成正确的身体,那么将新的纹理放入一个临时精灵节点,这样你就可以看到正在生成什么,我几乎肯定我之前创建了中间有洞的身体。
  • @Knight0fDragon - 不起作用????除非我做错了什么。查看我的更新。
  • 当我有时间看我想出什么
  • @Knight0fDragon - 谢谢。我添加了一个屏幕截图来显示炸弹损坏/cropnode 技巧的工作原理。如果你想要一份副本,我有一个 Xcode Playground 来测试它。
  • 刚玩了一下,好像做不到

标签: swift sprite-kit collision-detection


【解决方案1】:

所以我放弃了对底座的 SKTexture 进行变形,而是将底座实现为大约 30 个小块,每个小块都有自己的物理体,一旦被击中,每个块都会被完全移除。

我担心性能,但这些是静态块,到目前为止,性能仍然不错。整体图形效果还可以:

我可能会更改方块纹理以赋予它们粗糙的边缘,并尝试将每个方块的纹理替换为第一次被击中时更小、更损坏的纹理,以获得更易碎的外观。

【讨论】:

  • 很高兴知道。你测试过的最低设备是什么?
  • 目前只有我的 6s。
  • 卫生署!这是有史以来第二快的手机。仅被 7 击败。低分辨率和 CPU/GPU 组合,流畅度惊人。也许 iPhone SE 的速度要快一些。如果你能找到一部二手且便宜的,iPhone 6 Plus 就是新的 iPhone 4。它很难。
  • @Confused - 好点。我刚刚用 iOS 9.3 启动了我的旧 iPhone 5(不是“s”),它在上面运行得非常完美,丝毫没有减速的迹象。
  • 成就解锁!那个抽屉里还有什么?我怀疑是 Palm Trio,但没有黑莓 ;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多