2014-04-04 74 views
3

我设置了一个英雄和一些从顶部向下移动的平台。 有了这些我有一个检测平台上的英雄的土地时collisionBitMasks如果英雄来自上述(让通过平台上的英雄跳)雪碧套件碰撞没有弹跳

if (_hero.physicsBody.velocity.dy > 0) { 
          _hero.physicsBody.collisionBitMask = 0; 
         } 
         else {_hero.physicsBody.collisionBitMask = platformCategory; 
           } 

一切工作正常,除了主人公保持弹跳上平台。 当平台向下移动时,有没有办法让他坐在上面?

我试过使用physicsBody.restingphysicsBody.friction,但没有任何成功。

感谢您的帮助家伙

+0

真的,答案只是将**归零**设置为零。这是SpriteKit关于“bounciness”的术语。但是,您必须同时设置。 – Fattie

+0

感谢您再次提出这个问题,jboi的答案应该是要走的路。 – Vincent

回答

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

3

关键是要避免任何物理行为,而英雄是在平台上通过重置英雄身体的速度和主人公的位置设置为一个固定的垂直距离平台的位置偏移。

在半伪代码:

-(void) didSimulatePhysics 
{ 
    if (<hero on platform>) 
    { 
     hero.physicsBody.velocity = CGPointZero; 
     hero.position = CGPointMake(hero.position.x, 
            platform.position.y + <offset as needed>); 
    } 
} 
2

您是否尝试过改变节点的物理机构的归还财产?

_hero.physicsbody.restitution = 0; 

它控制着反弹力...

+0

它为我工作 – Shial

0

可以使用碰撞类别:

当velocity.dy是< 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 

    }