【问题标题】:How to make a Sprite an obstacle for another Sprite?如何让一个 Sprite 成为另一个 Sprite 的障碍?
【发布时间】:2020-05-10 18:04:55
【问题描述】:

我正在制作一款游戏,其中包含可移动的精灵和学习 SpriteKit 的障碍。我希望移动的精灵与障碍物发生碰撞并从障碍物反弹,但我希望障碍物保持固定。我该怎么做呢?我尝试了以下方法但没有成功:

  • 设置obstacle.physicsBody?.isDynamic = true。这使精灵穿过了障碍物。
  • 使用SKConstraint 修复对象的移动和旋转。当我这样做时,它们只是互相穿过。
  • 如下obstacle.physicsBody?.mass = CGPoint.maxFiniteMagnitude 将身体的质量设置为非常高,但这会冻结游戏。当我把它设置得很高时,它似乎什么也没做。
  • 当物体碰撞时设置obstacle?.physicsBody.velocity = CGVector(dx: 0, dy: 0)。我知道contact.bodyAcontact.bodyB 是按值传递而不是引用,所以我循环遍历带有障碍物的数组并以这种方式设置速度。障碍物仍然由其他精灵推动。

更新: - 设置obstacle.physicsBody?.collisionBitMask = PhysicsCategory.none,使精灵与障碍物发生碰撞,而不是相反。

对象设置如下,鱼是另一个精灵:

obstacle.position = location
obstacle.physicsBody = SKPhysicsBody(rectangleOf: obstacle.size)
obstacle.physicsBody?.isDynamic = true
obstacle.physicsBody?.categoryBitMask = PhysicsCategory.obstacle
obstacle.physicsBody?.contactTestBitMask = PhysicsCategory.fish
obstacle.physicsBody?.collisionBitMask = PhysicsCategory.fish
obstacle.physicsBody?.usesPreciseCollisionDetection = true
self.obstacles.append(obstacle)
super.addChild(obstacle)

如果我做错了什么/误解,请告诉我。谢谢。

【问题讨论】:

    标签: ios swift sprite-kit


    【解决方案1】:

    找到答案here。其中一个对象需要有.physicsBody?.isDynamic = true。在这种情况下,我将障碍物设置为false,因此它是静止的。

    【讨论】:

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