@flare-engine/文章
预分配出颗粒池+放出物——颗粒被再生而不是再分配,因此一个稳态放出物不分配出每个颗粒. 目标:60英尺处有200至500个活颗粒. 这个软件包拥有粒子数据和生命周期;渲染通过宿主的即时-mode Skia地层(PictureRecorder)来进行.
每个框架的计量综合成本公布于 基准,随着捕捉日期和跑到跑在每一行。 分配是用仪器进行的,而不是假设:抽取路径的对接套件读取 ParticlePool.created 每个框架和 bun run check:perf 如果一个稳定状态的发射器 给工厂打了一次电话, 建造失败了。 准确的整数在同一文档中公布.
安装
bun add @flare-engine/particles
使用量
import { ParticleEmitter } from '@flare-engine/particles';
const emitter = new ParticleEmitter({
rate: 30, lifetime: 1.2,
speed: 80, speedMax: 160,
direction: -Math.PI / 2, spread: Math.PI / 4,
startColor: { r: 1, g: 1, b: 1, a: 1 }, endColor: { r: 1, g: 1, b: 1, a: 1 },
startAlpha: 1, endAlpha: 0, // opacity fades via start/endAlpha — Color.a is not read
startSize: 4, endSize: 0,
gravityY: 98,
});
// gravity is part of config; update takes only dt
emitter.update(1 / 60);
缩放形状
默认每个颗粒的产卵在发射者身上 x编号 :yA级 shape 样本 产卵量
转而.. point (默认), circle, (中文(简体) ), ring, (中文(简体) ), rect,或 cone数字 :
import { ParticleEmitter } from '@flare-engine/particles';
// An explosion: spawn on a ring, travel outward from the centre.
const blast = new ParticleEmitter({
rate: 0, lifetime: 0.6,
speed: 120, speedMax: 200,
direction: 0, spread: 0.15,
shape: { kind: 'ring', radius: 24, radial: true },
});
blast.x = 160;
blast.y = 120;
blast.burst(48);
形状控制位置; direction 财务报告和审定财务报表 spread 仍然控制着速度. 他们相当的作曲
而不是竞争。 外向正常的形状.. circle, (中文(简体) ), ring, (中文(简体) ), cone - 能够手
以速度到达它 radial: true,这就是一个环 漂移粒子与
一个爆炸。 没有它, 戒指产出 在戒指上,一切仍然飞走 direction。 。 。 .
| 形状 | 职位 | 页:1 |
|---|---|---|
{ kind: 'point' } | 发射源 | 默认 不绘制随机值,所以没有形状的放出器会在形状存在之前产生一个相同的序列. |
{ kind: 'circle', radius, radial? } | 光碟内部的制服 | 制服 按地区 射线术语是 sqrt- 重量级,所以粒子不会聚集在中心. |
{ kind: 'ring', radius, thickness?, radial? } | 在戒指上, thickness 宽 | thickness 默认为 0(一光环),统一分布于整个乐队. |
{ kind: 'rect', width, height } | 矩形内制服 | 以发射器为中心,而不是以一角为锚. 没有外出正常,所以 radial 不适用. |
{ kind: 'cone', radius, angle } | 半角楔形制服 angle | 向着这里 direction一、结 论 产卵点 - 与 spread风扇的速度从一个点. |
sampleEmitterShape(shape, rand, out, direction?) 如果您想要放置其它东西,则导出
而不是颗粒。 写到一个打电话者拥有的 ShapeSample (单位:千美元)createShapeSample()和分配
没什么,所以它是安全的每颗粒子在一个稳定的状态循环。 每个形状绘制一个固定的数目
来自 rand,这就是保持种子发射器 准确的重放.
绘制成图示批次
drawParticles 将每个活粒子排入您拥有的批次, 因此粒子会随同冲出
而不是强迫第二次通过:
import { drawParticles, ParticleEmitter } from '@flare-engine/particles';
import type { ParticleBatchLike, ParticleFrameLike } from '@flare-engine/particles';
declare const emitter: ParticleEmitter;
declare const batch: ParticleBatchLike; // a @flare-engine/render SpriteBatch satisfies this
declare const atlasImage: unknown;
declare const frame: ParticleFrameLike; // e.g. a SpriteFrame from @flare-engine/assets
// each frame, before the batch flushes
drawParticles(emitter.pool, batch, atlasImage, frame);
批量和帧已打入 结构,所以这个包 仍然取决于什么,但
@flare-engine/core 财务报告和审定财务报表 @flare-engine/math 并且没有制造器可使用。 真实的
SpriteBatch 满意 ParticleBatchLike - 运行时间测试证实 @flare-engine/engine, (中文(简体) ),
不只是假设.
循环不分配每颗粒子,跳过插出大小或α的粒子 达到零,而不是支付 一个无形的抽取呼叫.
不应用每个粒子的颜色 . 池内插 startR/G/B → endR/G/B,但是一个批
保留效果 参考文献 直到它冲出,所以一个单一的可重复使用的效果对象会给出每个
粒子 最后一个颜色 —— 每个相框一个对象就是这个分配
软件包的存在是为了避免。 阿尔法 实值 适用,因为 drawRaw 把它当作数字。 如果你需要的话
今天的每颗粒子颜色, 写回循环 pool.particles 并承担成本.
见 API 规格。 。 。 .
许可证
阿帕奇 - 2.0