如何让一个精灵成为另一个精灵的障碍?
How to make a Sprite an obstacle for another Sprite?
我正在制作一款游戏,其中包含移动的精灵和学习 SpriteKit 的障碍。我希望移动的精灵与障碍物发生碰撞并从障碍物上弹开,但我希望障碍物保持固定。我该怎么做呢?我尝试了以下但没有成功:
- 设置
obstacle.physicsBody?.isDynamic = true
。这使得精灵穿过了障碍物。
- 用
SKConstraint
修复object的移动和旋转。当我这样做时,它们只是相互穿过。
- 将 body 的质量设置得非常高,如下所示
obstacle.physicsBody?.mass = CGPoint.maxFiniteMagnitude
但这会冻结游戏。当我把它设置得很高时,它似乎什么也没做。
- 设置
obstacle?.physicsBody.velocity = CGVector(dx: 0, dy: 0)
当 object 发生碰撞时。我知道 contact.bodyA
和 contact.bodyB
是按值传递的,而不是按引用传递的,所以我循环遍历带有障碍物的数组并以此方式设置速度。障碍物仍然被其他精灵推动。
更新:
- 设置 obstacle.physicsBody?.collisionBitMask = PhysicsCategory.none
使精灵与障碍物碰撞而不是相反。
object设置如下,鱼是另一个精灵:
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)
如果我做错了什么/误解了,请告诉我。谢谢。
找到答案here。其中一个对象需要 .physicsBody?.isDynamic = true
。在这种情况下,我将障碍设置为 false
,因此它是静止的。
我正在制作一款游戏,其中包含移动的精灵和学习 SpriteKit 的障碍。我希望移动的精灵与障碍物发生碰撞并从障碍物上弹开,但我希望障碍物保持固定。我该怎么做呢?我尝试了以下但没有成功:
- 设置
obstacle.physicsBody?.isDynamic = true
。这使得精灵穿过了障碍物。 - 用
SKConstraint
修复object的移动和旋转。当我这样做时,它们只是相互穿过。 - 将 body 的质量设置得非常高,如下所示
obstacle.physicsBody?.mass = CGPoint.maxFiniteMagnitude
但这会冻结游戏。当我把它设置得很高时,它似乎什么也没做。 - 设置
obstacle?.physicsBody.velocity = CGVector(dx: 0, dy: 0)
当 object 发生碰撞时。我知道contact.bodyA
和contact.bodyB
是按值传递的,而不是按引用传递的,所以我循环遍历带有障碍物的数组并以此方式设置速度。障碍物仍然被其他精灵推动。
更新:
- 设置 obstacle.physicsBody?.collisionBitMask = PhysicsCategory.none
使精灵与障碍物碰撞而不是相反。
object设置如下,鱼是另一个精灵:
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)
如果我做错了什么/误解了,请告诉我。谢谢。
找到答案here。其中一个对象需要 .physicsBody?.isDynamic = true
。在这种情况下,我将障碍设置为 false
,因此它是静止的。