我正在尝试模拟一个缓慢的爆炸,所以我希望某些东西的命中框增长。
有没有办法将碰撞箱增加到设定值,还是我必须手动调整物理体的大小?
目前我这样设置hitbox的大小:
self.physicsBody = [SKPhysicsBody bodyWithCircleOfRadius:_radius];
但我希望物理体在固定的时间间隔内(即 1 秒)从无到有成长。
我正在尝试模拟一个缓慢的爆炸,所以我希望某些东西的命中框增长。
有没有办法将碰撞箱增加到设定值,还是我必须手动调整物理体的大小?
目前我这样设置hitbox的大小:
self.physicsBody = [SKPhysicsBody bodyWithCircleOfRadius:_radius];
但我希望物理体在固定的时间间隔内(即 1 秒)从无到有成长。
不支持调整物理实体的大小。您只能为几帧创建一个尺寸稍大的新主体。然而,这并不完全有效。
由于这是一个圆形体,您可以使用常规三角函数进行手动命中测试。测试每个潜在接触者到爆炸中心的距离。
再想一想,SKFieldNode (radialGravityField) 可能会同时提供另一种方法。
增加节点的 xScale 和 yScale 似乎会相应地修改其physicsBody 的大小。
然而,由于这种缩放导致的任何碰撞都不会收到相应的脉冲——没有“缩放”速度“转移”到任何被“爆炸”触及的物体。炸药会将物体推开,但一旦它停止变化,接触的物体将没有额外的速度。这可能是也可能不是您想要的。
要对此进行扩展,您可以修改 collisionBitMasks 和 contactBitMasks,这样爆炸只会触发接触事件而不是碰撞解决。然后,使用 didBeginContact() 来识别碰撞发生的时间和地点,并根据需要向接触的物体施加脉冲。