我在spritekit objective c的帮助下制作了一个spritekit平台游戏。我正在使用spritekit的物理引擎,除了我还没有找到一种方法来实现玩家与平台的平台风格碰撞之外,每件事情都进展顺利。
我想要的是我的球员应该在他摔倒时与平台相撞而不是在跳跃时。如下图所示。玩家在这里跳跃,所以他不能与平台发生碰撞
我尝试在didBeginContact方法中删除平台与播放器的冲突,但这并没有帮助,因为我的平台不是动态类型。添加和删除碰撞确实适用于播放器,但不适用于平台。
非常感谢任何帮助。
编辑:这是一个示例,如果我在与两个相邻平台接触时更改了播放器的碰撞位掩码,将会发生什么。
一旦玩家对另一个平台做出反应,玩家就会失败。编辑: aramusss的第二个解决方案很好,但它确实为我创造了一个问题。由于我的游戏中的敌人站在平台上,如果我移除平台的物理身体,敌人将会站在它上面。
答案 0 :(得分:1)
您可以将平台保存在阵列中,然后检查玩家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
。如果创建的身体不再靠近播放器,或者播放器位于此平台下方,则此功能将删除它。