【发布时间】: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.bodyA和contact.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