【问题标题】:Prevent Node From Leaving Boundary防止节点离开边界
【发布时间】:2016-03-03 02:26:12
【问题描述】:

我正在使用GameplayKit 在给定的地图边界(比如说一个 1000x1000 的矩形)中创建绕过障碍物的路径。

我知道你可以让某些节点在寻路时避免“障碍”,我使用得非常好。然而,我很好奇的是:

  • 有没有办法使用相同的逻辑并将地图边界中的任何东西都算作“障碍物”?

一种解决方法是创建 2 个SKNodes 并将它们组合在一起以创建一个内部“洞”,该“洞”变成 1000x1000,但如果有更好的方法,我会尽量避免不必要的添加节点。下面我展示了我能做什么。

理想情况下我想让红色和黑色区域被视为障碍物,以便所有路径保持在主广场内部

更新: 正如我已经说过的那样,我正在使用 GameplayKit ,并且寻路算法无法将未包含在给定物理体中的区域计算为障碍物。它只能将障碍物计算为位于区域内的封闭多边形。如上所示创建 2 个节点是可行的,因为寻路现在无法创建位于绿色矩形 外部 的任何点。

【问题讨论】:

    标签: ios sprite-kit skspritenode gameplay-kit


    【解决方案1】:

    让你的游戏像这样分层

    Scene
      SKNode topshape
      SKNode bottomshape
      SKNode innerbox <-- This is the size of your inner square
        SKNode  gamenodes <-- Place all inner nodes here
        ...
    

    然后使用内部框大小的边缘循环矩形将SKPhysicsBody 附加到innerbox SKNode 并使其成为墙类别,这将使您的所有节点保持在内部,前提是您的节点不会以疯狂的速度移动而破坏引擎。

    您将添加 1 个额外节点而不是 2 个(从技术上讲,您可以将底部形状和顶部形状添加 1 个节点,使其添加 0 个节点),但所有处理都将在内部节点内完成,因此不会增加太多开销。

    【讨论】:

    • 你将如何制作顶部和底部的一个节点?有内孔的物理体?..不认为你能做到这一点
    • 根据您提供的内容,您可以将其设为 1 个节点,其中包含您正在显示的内容的纹理,然后内部节点将是您的实际游戏区域
    • 正确。这就是我目前拥有的方式。我需要这个外部区域是一个物理体而不是一个定义的区域,以允许寻路算法将其识别为“障碍物”,而不是使用纹理来定义周长。图 6-1 developer.apple.com/library/ios/documentation/General/… 遗憾的是他们没有办法制作非节点区域和障碍
    • 为什么需要外部区域作为物理体,这不是正方形吗?
    • 是的。一些多边形(几分钟前我编辑了我的 Q)
    猜你喜欢
    • 1970-01-01
    • 2014-10-15
    • 1970-01-01
    • 2016-02-22
    • 1970-01-01
    • 2016-05-23
    • 1970-01-01
    • 2019-12-23
    • 2021-08-18
    相关资源
    最近更新 更多