变形精灵直到纹理不再连续 - 如何保持接触检测?
Deforming a sprite until texture no longer contiguous - how to maintain contact -detection?
仍在开发我的 space Invaders 克隆,我想在屏幕底部添加可破坏的基地:
我已经弄清楚如何通过让炸弹和盾牌相互接触来修改盾牌的外观,然后在 didBegincontact 中,从炸弹爆炸的蒙版和当前纹理创建一个 SKCropNode屏蔽然后使用视图的 texture(from: node)
方法获取渲染纹理并从新纹理更新屏蔽的纹理和 physicsBody。
然而 - 当盾牌的中心有一个洞被炸开,使得盾牌的纹理不再连续(例如图片中最左边的盾牌),生成的 physicsBody 仅覆盖左侧纹理的一部分。因此,任何击中盾牌右侧部分的炸弹都不会被检测到。
我怎样才能让我的盾牌分成多块并保持接触检测正常工作?
可能的解决方案:
- 以某种方式扫描新纹理并创建多个 physicsBoies
要么分配给单个 SKSpriteNode 使用
SKPhysicsbody(bodies: [SKPhysicsBody])
。如果,正如它所显示的那样,
SKPhysicsBody 从纹理的左上角生成,然后
也许将纹理旋转 90 度 4 次以生成 4
物理机构?
使用某种 alpha 掩码(以便
shiled 是清晰的)并将盾牌的 physicsBody 保持在
原始形状,当调用 dBC 时,检查像素的颜色
在接触 point/under 炸弹时 - 如果它们是 'clear',则采取
不采取任何行动,让炸弹畅通无阻地落下,直到
调用 didEndContact 表示炸弹已清除
盾.
在炸弹和护盾之间使用一个简单的intersectsRect
然后检查炸弹下方的像素颜色 - 如果清晰,则不要这样做
任何东西。
============================================= ======
更新:请参阅下文了解未拆分时精灵纹理的损坏情况。棕色底座是显示第一个损坏的原始底座(physicsBody 显示原始底座,纹理显示 dame)。绿色基地已经重新计算了它的物理体:
更新:请参阅下面的纹理拆分时的物理体。棕色是原来的盾牌,小凹痕是 'new' 伤害。 physicsBody 仅映射到图像的左侧部分。
所以我放弃了对底座的 SKTexture 进行变形,而是将底座实现为大约 30 个小块,每个小块都有自己的 physicsBody,一旦被击中,每个小块都会被完全移除。
我很关心性能,但这些都是静态块,到目前为止,性能仍然不错。整体图文效果也还可以:
我可能会更改方块的纹理,使它们具有粗糙的边缘,并尝试在第一次被击中时将每个方块的纹理替换为更小、损坏更严重的纹理,以获得更破碎的外观。
仍在开发我的 space Invaders 克隆,我想在屏幕底部添加可破坏的基地:
我已经弄清楚如何通过让炸弹和盾牌相互接触来修改盾牌的外观,然后在 didBegincontact 中,从炸弹爆炸的蒙版和当前纹理创建一个 SKCropNode屏蔽然后使用视图的 texture(from: node)
方法获取渲染纹理并从新纹理更新屏蔽的纹理和 physicsBody。
然而 - 当盾牌的中心有一个洞被炸开,使得盾牌的纹理不再连续(例如图片中最左边的盾牌),生成的 physicsBody 仅覆盖左侧纹理的一部分。因此,任何击中盾牌右侧部分的炸弹都不会被检测到。
我怎样才能让我的盾牌分成多块并保持接触检测正常工作?
可能的解决方案:
- 以某种方式扫描新纹理并创建多个 physicsBoies
要么分配给单个 SKSpriteNode 使用
SKPhysicsbody(bodies: [SKPhysicsBody])
。如果,正如它所显示的那样, SKPhysicsBody 从纹理的左上角生成,然后 也许将纹理旋转 90 度 4 次以生成 4 物理机构? 使用某种 alpha 掩码(以便
shiled 是清晰的)并将盾牌的 physicsBody 保持在
原始形状,当调用 dBC 时,检查像素的颜色 在接触 point/under 炸弹时 - 如果它们是 'clear',则采取 不采取任何行动,让炸弹畅通无阻地落下,直到
调用 didEndContact 表示炸弹已清除
盾.在炸弹和护盾之间使用一个简单的
intersectsRect
然后检查炸弹下方的像素颜色 - 如果清晰,则不要这样做 任何东西。
============================================= ======
更新:请参阅下文了解未拆分时精灵纹理的损坏情况。棕色底座是显示第一个损坏的原始底座(physicsBody 显示原始底座,纹理显示 dame)。绿色基地已经重新计算了它的物理体:
更新:请参阅下面的纹理拆分时的物理体。棕色是原来的盾牌,小凹痕是 'new' 伤害。 physicsBody 仅映射到图像的左侧部分。
所以我放弃了对底座的 SKTexture 进行变形,而是将底座实现为大约 30 个小块,每个小块都有自己的 physicsBody,一旦被击中,每个小块都会被完全移除。
我很关心性能,但这些都是静态块,到目前为止,性能仍然不错。整体图文效果也还可以:
我可能会更改方块的纹理,使它们具有粗糙的边缘,并尝试在第一次被击中时将每个方块的纹理替换为更小、损坏更严重的纹理,以获得更破碎的外观。