Module skeleton

骨骼模块,包含结点、长度约束和角度约束 运作物理特性

Functions

lerp (a, b, t) 线性插值
link (length_min, length_max, speed, exponential, drag) 生成一个长度约束的表,可以用来把两个结点连接到一起.
constraint (fixed, moving, angle_min, angle_max, speed, exponential, drag) 生成一个角度约束的表,用来限制和某个结点相连的两个其他结点的角度.
Joint:new (pos) 创建一个结点
Joint:add_neighbor (joint, link) 添加邻居结点.
Joint:remove_neighbor (joint) 移除邻居结点
Joint:add_mutual_neighbor (joint, link) 添加相互的邻居结点
Joint:remove_mutual_neighbor (joint) 移除相互的邻居结点
Joint:add_constraint (constraint) 添加角度约束
Joint:remove_constraint (constraint) 移除角度约束
Joint:add_influence (joint, t) 添加对其他结点的影响.
Joint:clear_influence () 清除影响
Joint:get_influence (joint) 获取某邻居对自身的影响
Joint:update_pos () 根据影响更新自己的位置.
Joint:update_drag () 根据影响中的拖拽因素更新自己的位置.
Joint:update_self () 根据影响更新位置,考虑拖拽,并清除影响
Joint:influence_lengths (without, time) 考虑长度约束条件,对邻居结点施加影响
Joint:influence_constraints (without, time) 考虑角度约束条件,对邻居结点施加影响
Joint:influence_all (without, time) 考虑长度和角度约束条件,对邻居结点施加影响
Joint:influence_recursive (without, time) 递归对邻居节点施加影响.


Functions

lerp (a, b, t)
线性插值

Parameters:

  • a 起始值
  • b 终止值
  • t 时间/位置,取0时返回a,取1时返回b
link (length_min, length_max, speed, exponential, drag)
生成一个长度约束的表,可以用来把两个结点连接到一起. 使用 fabrik 算法,详见参考: https://github.com/lincerely/gecko/tree/master https://sean.cm/a/fabrik-algorithm-2d

Parameters:

  • length_min
  • length_max
  • speed 一端结点移动时,另一端结点最大的移动速度。非 exponential 的情况下,为像素/秒,而 exponential 的情况下,为相对值
  • exponential 是否让移动速度随距离指数型衰减,效果更有弹力
  • drag 0~1 值,一端移动会带动另一端以相同方式移动

Returns:

    table, 可以用来给 Joint:add_neighbor 使用
constraint (fixed, moving, angle_min, angle_max, speed, exponential, drag)
生成一个角度约束的表,用来限制和某个结点相连的两个其他结点的角度. 使用 fabrik 算法,详见参考: https://github.com/lincerely/gecko/tree/master https://sean.cm/a/fabrik-algorithm-2d

Parameters:

  • fixed 作为参考的结点,这个约束只会控制以下的 moving 结点
  • moving 受控制的结点
  • angle_min 角度下限(弧度)
  • angle_max 角度上限(弧度)
  • speed 速度(类似 link
  • exponential 指数衰减(类似 link
  • drag 拖拽(类似 link

Returns:

    table, 可以用来给 Joint:add_constraint 使用
Joint:new (pos)
创建一个结点

Parameters:

  • pos 初始位置,默认为 (0, 0)
Joint:add_neighbor (joint, link)
添加邻居结点. 这个只是单向的,一般肯定要添加双向的,请用Joint:add_mutual_neighbor

Parameters:

  • joint 邻居结点
  • link 长度约束

See also:

Joint:remove_neighbor (joint)
移除邻居结点

Parameters:

  • joint 邻居结点
Joint:add_mutual_neighbor (joint, link)
添加相互的邻居结点

Parameters:

  • joint 邻居结点
  • link 长度约束

See also:

Joint:remove_mutual_neighbor (joint)
移除相互的邻居结点

Parameters:

  • joint 邻居结点
Joint:add_constraint (constraint)
添加角度约束

Parameters:

  • constraint

See also:

Joint:remove_constraint (constraint)
移除角度约束

Parameters:

  • constraint 需要和添加的时候是同一个表
Joint:add_influence (joint, t)
添加对其他结点的影响. 影响可以包含 pos, drag_translate, drag_rotate 属性。 每次更新时,首先会计算邻居的影响,再将各影响平均,最后得到最终位置

该系列函数较底层,一般不会用到

Parameters:

  • joint 需要和添加的时候是同一个表
  • t 需要和添加的时候是同一个表
Joint:clear_influence ()
清除影响
Joint:get_influence (joint)
获取某邻居对自身的影响

Parameters:

  • joint 邻居
Joint:update_pos ()
根据影响更新自己的位置. 较底层,一般不会用到
Joint:update_drag ()
根据影响中的拖拽因素更新自己的位置. 较底层,一般不会用到
Joint:update_self ()
根据影响更新位置,考虑拖拽,并清除影响
Joint:influence_lengths (without, time)
考虑长度约束条件,对邻居结点施加影响

Parameters:

  • without 要忽略的邻居结点
  • time 经过的时间长度
Joint:influence_constraints (without, time)
考虑角度约束条件,对邻居结点施加影响

Parameters:

  • without 要忽略的邻居结点
  • time 经过的时间长度
Joint:influence_all (without, time)
考虑长度和角度约束条件,对邻居结点施加影响

Parameters:

  • without 要忽略的邻居结点
  • time 经过的时间长度
Joint:influence_recursive (without, time)
递归对邻居节点施加影响. 该函数是主要使用的函数。 例如让头运动带动身体,可以先改变头结点的坐标,然后让头结点递归施加影响,就带动了连接的身体结点。

Parameters:

  • without 要忽略的邻居结点
  • time 经过的时间长度
generated by LDoc 1.5.0 Last updated 2024-05-16 15:32:50