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

ios - 玩家下落时 Spritekit 与平台发生碰撞

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

我正在 spritekit objective-c 的帮助下制作一个 spritekit 平台游戏。为此我使用了 spritekit 的物理引擎,除了我还没有找到一种方法来实现玩家与平台的 plaformer 风格碰撞之外,一切都很顺利。

我想要的是我的玩家应该在下落时与平台发生碰撞,而不是在跳跃时。如下图所示。此处玩家正在跳跃,因此他不能与平台发生碰撞

在这张图片中,玩家正在摔倒,所以他必须站在平台上。 enter image description here

我尝试在 didBeginContact 方法中消除平台与玩家的冲突,但这并没有帮助,因为我的平台不是动态类型。添加和移除碰撞对玩家有效,但对平台无效。

任何帮助将不胜感激。

编辑:这里是一个例子,如果我在接触两个相邻平台时更改玩家的碰撞位掩码会发生什么。

玩家一旦与另一个平台发生 react 就会跌倒。

编辑: aramusss 的第二个解决方案很好,但它确实给我带来了另一个问题。由于我的游戏中有敌人站在平台上,如果我移除平台的物理主体,敌人就会倒在上面。



Best Answer-推荐答案


您可以将平台保存在数组中,然后检查玩家 Y 位置。如果 player.position.y - (player.size.height/2) <platform.position.y - (platform.size.height/2) 你停用碰撞这个平台(意味着 player 在平台下方,我们不希望它发生碰撞)。你应该使用:

// You should set collision bit mask to avoid collisioning between player and platforms, but not between other objects:
player.physicsBody.collisionBitMask = 1;
player.physicsBody.categoryBitMask = playerCategory; // An int constant, for example 101
player.physicsBody.contactTestBitMask = platformCategory; //Another constant, for example 102

platform.physicsBody.collisionBitMask = 1;
platform.physicsBody.categoryBitMask = platformCategory;
platform.physicsBody.contactTestBitMask = playerCategory;

像这样设置值将使两个物体不会发生碰撞,而更改它们会使它们再次发生碰撞。

编辑

另一种解决方案是使用 NSTimer 每 0.5 秒调用一个方法(例如),该方法将检查播放器附近是否有平台。如果有并且它在播放器后面,它将创建一个与平台大小相同的 physicsBody。如果创建了一个不再靠近玩家的 body ,或者玩家在该平台下方,该功能将删除它。

关于ios - 玩家下落时 Spritekit 与平台发生碰撞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32776304/

回复

使用道具 举报

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

本版积分规则

关注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