【问题标题】:Sprite Kit Collision without bouncing没有弹跳的 Sprite Kit 碰撞
【发布时间】:2014-05-16 19:02:37
【问题描述】:

我设置了一个英雄和一些从上向下移动的平台。 有了这些,我有碰撞位掩码,可以检测英雄何时降落在平台上,如果英雄来自上方(让英雄跳过平台)

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

一切正常,除了英雄在平台上不断弹跳。 有没有办法让他坐在上面,同时平台向下移动?

我尝试使用physicsBody.resting 和physicsBody.friction,但没有成功。

感谢大家的帮助

【问题讨论】:

  • 真的,答案就是将restitution设置为零。这就是 SpriteKit 对“弹性”的称呼。但是,您必须同时设置。
  • 感谢您再次提出这个问题,jboi 的回答应该是正确的方法。

标签: ios sprite-kit physics collision


【解决方案1】:

一分钟前遇到了同样的问题。它适用于设置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,屏幕上的所有其他对象仍会在平台上弹跳

【讨论】:

    【解决方案2】:

    诀窍是通过重置英雄身体的速度并将英雄的位置设置为与平台位置的固定垂直偏移量来避免英雄在平台上时的任何物理行为。

    在半伪代码中:

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

    【讨论】:

      【解决方案3】:

      您是否尝试过更改节点物理体的恢复属性?

      _hero.physicsbody.restitution = 0;
      

      它控制弹力...

      【讨论】:

        【解决方案4】:

        您可以使用碰撞类别:

        当velocity.dy

        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
        
            }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-10-28
          • 2014-01-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多