@flare-engine/ math (英语)
火焰引擎的2D数学原始- Vec2, (中文(简体) ), Rect, (中文(简体) ), Circle, (中文(简体) ), Transform2D, (中文(简体) ), Mat3, (中文(简体) ), Color (单位:千美元) argbToFloat4Into 包装 0xAARRGGBB ),35个放松功能,种子RNG,相交测试,角度/策略帮助者(angleDelta, (中文(简体) ), rotateTowards, (中文(简体) ), Vec2.turnVelocityTowardInto, (中文(简体) ), Vec2.scaleToLengthInto, (中文(简体) ), Vec2.perp, (中文(简体) ), Vec2.crossSV),加权随机抽取(weightedIndex, (中文(简体) ), weightedIndexBy, (中文(简体) ), weightedPick(b) 确定散列功用hashU32, (中文(简体) ), seededIndex)和计时窗口奖励数学(cappedBonus, (中文(简体) ), advanceWindowedStreak, (中文(简体) ), windowExpired, (中文(简体) ), remainingInWindow) (中文(简体) ). 具有静态方法命名空间的平面对象类型; 零空格形式为 out 在游戏循环中避免GC压力的参数.
安装
bun add @flare-engine/math
使用量
import { vec2, Vec2, Rect, easeOutQuad, SeededRNG } from '@flare-engine/math';
const a = vec2(0, 0);
const b = vec2(10, 0);
const out = vec2(0, 0);
Vec2.lerp(a, b, 0.5, out);
const rng = new SeededRNG(42);
const t = easeOutQuad(rng.float(0, 1));
曲线
四方式/立方体贝塞尔和Catmull-Rom取样,每个取样都有分配表和一个 …Into 双向
每帧使用,外加大约弧长:
import { bezier3Into, catmullRom, bezier3Length, vec2 } from '@flare-engine/math';
// Sampling a path each frame — reuse one buffer, allocate nothing.
const point = vec2(0, 0);
bezier3Into(0, 0, 20, 60, 80, 60, 100, 0, 0.35, point);
// Catmull-Rom passes *through* p1 and p2, so a path hits its waypoints exactly.
const onPath = catmullRom(0, 0, 10, 5, 20, 5, 30, 0, 0.5);
// Arc length is a chord approximation, so always a slight underestimate.
const length = bezier3Length(0, 0, 20, 60, 80, 60, 100, 0, 32);
控制点是松散的数字而不是 Vec2 对象,因此坐标已按
Float32Array 可以在不先建造临时工的情况下取样. t 被夹住 [0, 1] 相当
比推断.
段相交点
intersection.ts 答题 是否为 形状相交; 这些答案 地点 两段交叉:
import { segmentIntersection, segmentsIntersect, vec2, segmentIntersectionInto } from '@flare-engine/math';
segmentIntersection(5, 0, 5, 10, 0, 5, 10, 5); // → { x: 5, y: 5 }
// Zero-alloc form; `out` is left untouched when the result is null.
const hit = vec2(0, 0);
segmentIntersectionInto(0, 0, 10, 10, 0, 10, 10, 0, hit);
折叠重叠返回 null。 。 。 . 卧倒在地上的两个部分确实相互交接
有许多要点——因此没有一点可以报告。 询问 segmentsIntersect 当
是/无答案是你想要的;它返回 true 为了那个案子.
决定保存和重放
SeededRNG 将整个状态暴露为一英寸32,因此运行可以存储并准确恢复:
import { SeededRNG } from '@flare-engine/math';
const rng = new SeededRNG(1234);
const savedState = rng.getState(); // JSON-safe — store it beside the save
const restored = new SeededRNG(0);
restored.setState(savedState); // next() now continues the original sequence
见 API 规格。 。 。 .
许可证
阿帕奇 - 2.0