我设置了一个英雄和一些从顶部向下移动的平台。 有了这些,我有一个collisionBitMasks,可以检测英雄何时登陆平台,如果英雄来自上方(让英雄跳过平台)
if (_hero.physicsBody.velocity.dy > 0) {
_hero.physicsBody.collisionBitMask = 0;
}
else {_hero.physicsBody.collisionBitMask = platformCategory;
}
除了英雄在平台上弹跳之外,一切正常。 当平台向下移动时,有没有办法让他坐在上面?
我尝试使用physicsBody.resting
和physicsBody.friction
,但没有成功。
感谢帮助伙伴们
答案 0 :(得分:6)
一分钟前也有同样的问题。它适用于设置restitution
,但您需要设置两个恢复。英雄和其中一个平台(或者在我的情况下是场景边界)。
这样:
hero.physicsBody.collisionBitMask = platformCategory
hero.physicsBody.restitution = 0.0
platform.physicsBody.restitution = 0.0
any_other_object_that_should_still_bounce.physicsBody.restitution = 1.0
会做到的。只要您设置restitution > 0
答案 1 :(得分:3)
诀窍是当英雄在平台上时,通过重置英雄身体的速度并将英雄的位置设置为与平台位置固定的垂直偏移来避免任何物理行为。
在半伪代码中:
-(void) didSimulatePhysics
{
if (<hero on platform>)
{
hero.physicsBody.velocity = CGPointZero;
hero.position = CGPointMake(hero.position.x,
platform.position.y + <offset as needed>);
}
}
答案 2 :(得分:2)
您是否尝试更改节点物理主体的恢复属性?
_hero.physicsbody.restitution = 0;
它控制着弹性......
答案 3 :(得分:0)
您可以使用碰撞类别:
当velocity.dy <&lt; 0英雄正在堕落。
func collisionWithPlayer(player: SKNode) {
// 1
if player.physicsBody?.velocity.dy < 0 && (player.position.y - player.frame.size.height / 2.0) >= (self.position.y){
// 2
player.physicsBody?.collisionBitMask = CollisionCategoryBitMask.Platform
}