【问题标题】:SKLabelNode PhysicsBody IssueSKLabelNode PhysicsBody 问题
【发布时间】:2020-05-04 18:52:37
【问题描述】:

游戏Supertype 令人难以置信。
我正在考虑制作一个类似的应用程序。 有没有什么简单的方法可以将 SKLabelNode 的文本变成物理体?

例如,我想让字母“A”成为文字物理体
- 是否有任何简单的方法来实现这一点而无需实际定义每个 cgPath?
- 我想我可以将“A”设为 SKSpriteNode,但这似乎很糟糕。

另外,
我在将 SKSpriteNodes 转换为物理体时遇到了很多问题。我可以轻松地将单个图像变成一个物理体,但如果它是一个被不可见片段分割的图像,事情就会崩溃。 Swift 选择一个特定的段来成为一个物理体。
• 我也很沮丧,因为你不能定义一个凹形并制作一个物理体。但是你可以让凹的连续图像很好地变成物理体。

最后,,
将一个词变成一个物理体,并使用布尔值将其定义为分崩离析或粘在一起,这将是非常好的。有没有办法做到这一点?
(我想我可以通过在初始化中聚集一个数组来做到这一点:[SKPhysicsBody])

【问题讨论】:

    标签: swift sprite-kit physics bezier cgpath


    【解决方案1】:

    SKLabelNode 没有物理实体,因此您不能直接将物理应用到它。您可以将它们创建为一组SKSpriteNodes,并将每个字母的图像分配给身体纹理。

    要“打开和关闭物理体”,您应该切换节点的属性isDynamic。对于其他效果,您可以使用affectedByGravity 属性以及碰撞和接触位掩码,这取决于您想要什么。

    为了让碰撞感觉更真实,您可以使用SKPhysicsContactDelegate,这样您就可以自动“绘制”一个具有精确字母形状的物理体。像这样的:

    letterNode.physicsBody = SKPhysicsBody(texture: letterTexture, alphaThreshold: 1.0, size: letterTexture.size())
    

    要处理碰撞和接触,不要忘记在场景中设置contactDelegate,如下所示:

    self.physicsWorld.contactDelegate = self
    

    【讨论】:

    • 好吧听起来不错。我有一种感觉,我可能需要使用图像。这意味着像 ij 这样的字母需要 2 个精灵。我可能会继续定义他们的 CGPaths 以节省内存并降低复杂性。不幸的是 SVG 没有这个属性。
    • @Jonathan 无论如何,您可能都必须为物理创建 CGPath。由于通过 alpha 透明度的 iOS13 物理体不能按预期工作。这是一个已知的错误。我个人使用一个名为 PaintCode 的程序来创建我的复杂路径,它会将矢量线输出为您的代码,可能会节省您的时间
    • @RonMyschuk 非常感谢!我完全忘记了PaintCode,我认为它会很有价值! (反正我通常会画矢量,所以这将非常有用)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 2015-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多