• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

ios - 如何在 SceneKit 场景编辑器中设置多重碰撞

[复制链接]
菜鸟教程小白 发表于 2022-12-12 16:43:02 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我正在使用 XCode 7 中的新 SceneKit 编辑器。我设法与两个对象发生碰撞。我想知道如何指定与多个类别的冲突。假设玩家与地面和敌人发生碰撞。仅使用这两个输入字段如何实现?

XCode7 Scenekit Editor Collision



Best Answer-推荐答案


关键是要确保您的类别都是 2 的幂(2、4、8、16 等),这样您就可以充分利用位掩码。

要检查两个对象是否发生碰撞,SceneKit 将执行类似于下面显示的 willCollide 函数的操作。按位与 (&) 运算符用于检查 Ints 中的任何位是否在 categorycollidesWith 中匹配。如果任何位匹配,则对象应该发生碰撞。

func willCollide(category:Int, collidesWith:Int) -> Bool {
    return category & collidesWith != 0
}

使用 2 的幂意味着每个类别在 Int 中都有一个唯一的位位置。

let cat1:Int = 2    // 00010
let cat2:Int = 4    // 00100
let cat3:Int = 8    // 01000
let cat4:Int = 16   // 10000

willCollide(cat1, collidesWith: cat1)  // true
willCollide(cat1, collidesWith: cat2)  // false

您可以使用按位或 (|) 运算符来组合多个 Int,在这种情况下允许一个类别联系多个其他类别。

let cat1and2 = cat1 | cat2  //  00110 or 6 in decimal
willCollide(cat1, collidesWith: cat1and2)  // true
willCollide(cat2, collidesWith: cat1and2)  // true
willCollide(cat3, collidesWith: cat1and2)  // false

对于您的示例,类似以下的内容会起作用;

  • 播放器
    • 类别 = 2
    • 碰撞掩码 = 12
      • 4 | 8 = 0010 | 0100 = 0110 = 12
  • 敌人
    • 类别 = 4
    • 碰撞掩码 = 2
  • 地面
    • 类别 = 8
    • 碰撞掩码 = 2

为敌人和地面设置碰撞掩码很重要,因为有时敌人会与玩家发生碰撞。这与玩家与敌人碰撞不同。注意:我省略了敌人也会接触地面的部分,反之亦然。

关于ios - 如何在 SceneKit 场景编辑器中设置多重碰撞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33199502/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap