OGeek|极客世界-中国程序员成长平台

标题: ios - 玩家下落时 Spritekit 与平台发生碰撞 [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-13 11:04
标题: ios - 玩家下落时 Spritekit 与平台发生碰撞

我正在 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/






欢迎光临 OGeek|极客世界-中国程序员成长平台 (http://sqlite.in/) Powered by Discuz! X3.4