SKPhysicsBody

节点上的物理实体,跟场景的 SKPhysicsWorld 相互

  • 初始化方法,不能被继承。受 SKPhysicsWorld 重力等影响
/// 半径为 r 的圆,圆心在 原点 的圆
public init(circleOfRadius r: CGFloat)
/// 半径为 r 的,圆心在 center 的圆
public init(circleOfRadius r: CGFloat, center: CGPoint)

/// 以 s 为宽高,中心点在 原点 的矩形
public init(rectangleOf s: CGSize)
/// 以 s 为宽高,中心点在 center 的矩形
public init(rectangleOf s: CGSize, center: CGPoint)

/// 一个逆时针弯曲且无自交的凸或凹多边形路径,位置相对于节点的原点
public init(polygonFrom path: CGPath)
  • 初始化方法,不能被继承。静态环境,没有体积,不受 SKPhysicsWorld 影响。边缘可以与体积物体碰撞,但不能相互碰撞。如果直接设置其他的节点的 position 与矩形或者路径有交集,可能会穿模!
/// 一条从 p1 到 p2 的线。
public init(edgeFrom p1: CGPoint, to p2: CGPoint)
/// 通过路径 path 创建。路径必须没有自交点。
public init(edgeChainFrom path: CGPath)
/// 通过路径 path 创建。最后一个点与第一个点会自动连接起来。路径必须没有自交点。
public init(edgeLoopFrom path: CGPath)
/// 通过 CGRect 创建一个矩形。
public init(edgeLoopFrom rect: CGRect)
/// @available(iOS 8.0, *) 通过纹理创建,size 一般为纹理的size()
public init(texture: SKTexture, size: CGSize)
/// @available(iOS 8.0, *) 通过纹理创建,只显示透明度超过 alphaThreshold 的值,size 一般为纹理的size()
public init(texture: SKTexture, alphaThreshold: Float, size: CGSize)
/// 复合体集合创建
public init(bodies: [SKPhysicsBody])
  • 物理属性
/// 是否受重力、其他物体作用力的影响。默认是 true。
open var isDynamic: Bool
/// 使用精准的接触。在速度很快的时候,可能一帧的情况下,物体碰撞后,没来及响应又离开。默认为 false,设置为 true,会提前计算轨迹,预测碰撞,很耗性能。
open var usesPreciseCollisionDetection: Bool
/// 是否旋转,默认 true
open var allowsRotation: Bool
/// @available(iOS 8.0, *) 是否像关节一样嵌入到父节点上,默认 false
open var pinned: Bool
/// 是否静止不动
open var isResting: Bool
/// 摩擦力系数,默认是 0.2(0~1)
open var friction: CGFloat
/// @available(iOS 8.0, *)电荷,要设置磁场才有用,默认是 0
open var charge: CGFloat
/// 弹性系数,默认是 0.2(0~1)
open var restitution: CGFloat
/// 空气阻力或水的阻力,默认是 0.1(0~1)
open var linearDamping: CGFloat
/// 旋转时空气阻力或水的阻力,默认是 0.1(0~1)
open var angularDamping: CGFloat
/// 密度,默认是 1
open var density: CGFloat
/// 质量,默认是 1,跟密度 density 相关
open var mass: CGFloat
/// 占据的面积,真实的面积是需乘以150²
open var area: CGFloat { get }
/// 是否受重力影响,默认是 true。设置为 false 的仍然会受到 linearGravityField(withVector:) 和 radialGravityField() 创建的重力场的影响。
open var affectedByGravity: Bool
/// 获取关节列表
open var joints: [SKPhysicsJoint] { get }
/// 自己所属的节点
weak open var node: SKNode? { get }
/// 速度,默认是 (0, 0)
open var velocity: CGVector
/// 角速度,默认是 0
open var angularVelocity: CGFloat
  • 实体 bitMask 相关
/// @available(iOS 8.0, *) 受到哪些力的影响,默认 0xFFFFFFFF 都影响
open var fieldBitMask: UInt32
/// 物体的掩码值,需要对外给出碰撞或者接触的结果时需要设置。配合 contactTestBitMask 使用,默认 0xFFFFFFFF。
open var categoryBitMask: UInt32
/// 可以碰撞的类别,影响物体运动,为 0 时没有碰撞效果,直接穿透,默认 0xFFFFFFFF 全部都可以碰撞
open var collisionBitMask: UInt32
/// 设置可以接触的类别,对外给出碰撞结果,走 scene 的代理。配合 categoryBitMask 使用。默认是 0x0
open var contactTestBitMask: UInt32
/// 所有接触的实体
open func allContactedBodies() -> [SKPhysicsBody]
  • 添加力
/// 施加持续的力,根据F=ma加速度提升, 速度会持续增加。但是速度不会立刻改变。
/// 对物体的中心点施加一个力。
open func applyForce(_ force: CGVector)
/// 对物体的 point 点施加一个力
open func applyForce(_ force: CGVector, at point: CGPoint)
/// 对物体施加角速度(旋转)方向的力
open func applyTorque(_ torque: CGFloat)

/// 叠加之前的速度,产生新的速度
/// 对物体的中心点施加一个速度。
open func applyImpulse(_ impulse: CGVector)
/// 对物体的 point 点施加一个速度
open func applyImpulse(_ impulse: CGVector, at point: CGPoint)
/// 对物体添加一个角速度(旋转)方向的力
open func applyAngularImpulse(_ impulse: CGFloat)
posted on 2022-09-29 13:53  xiao孛  阅读(74)  评论(0编辑  收藏  举报