【发布时间】: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