gpt4 book ai didi

swift - 变形 Sprite 直到纹理不再连续 - 如何保持接触检测?

转载 作者:行者123 更新时间:2023-11-28 06:33:48 24 4
gpt4 key购买 nike

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

enter image description here

我已经弄清楚如何通过让炸弹和盾牌相互接触来修改盾牌的外观,然后在 didBegincontact 中,从炸弹爆炸的 mask 和盾牌的当前纹理创建一个 SKCropNode 和然后使用 View 的 texture(from: node) 方法获取渲染纹理,并从新纹理更新盾牌的纹理和 physicsBody。

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

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

可能的解决方案:

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

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

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

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

enter image description here

更新:请参阅下面的纹理拆分时的物理体。棕色是原来的盾牌,小凹痕是"new"的伤害。 physicsBody 仅映射到图像的左侧部分。

enter image description here

最佳答案

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

我很关心性能,但这些都是静态 block ,到目前为止,性能仍然不错。整体图文效果也还可以:

enter image description here

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

关于swift - 变形 Sprite 直到纹理不再连续 - 如何保持接触检测?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39572748/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com