emitter.size 是双刃剑:粒子精确定位 0,0 与条带随机出生(HarmonyOS)
现象: 马赛克 256 块定点拼合出现"间隙重叠 + 边缘不齐 + 倾斜感",且每次复位/切档重建后错位图案都不同;反过来,另一些效果(白点消散)又需要粒子"沿一条线随机出生"------同一个参数,用法完全相反。
原因: emitter.size 是发射区域宽高(particle.d.ts :796-800),粒子在区域内均匀随机 出生------size:1,1 即每块 ±0.5vp 随机偏移;它既是精确定位错误的源头,也是条带效果的正牌机制。
解决: 精确拼合改 0,0 点发射 + 瓦片尺寸精确等于格子;条带效果正向设"线宽 × 薄条带";铁证判别法是"重建结果每次完全一致"。
暗面:随机出生区毁掉精确定位(坑10)
想让 256 块严丝合缝,写了 emitter.size: [1, 1]------1×1vp 已经够小了吧?结果块界处随机错缝/叠。因为 emitter 的 size 是发射区域:粒子在 宽, 高 区域内均匀随机出生,1,1 区域意味着出生点 ±0.5vp 随机偏移。
旧版块间 1vp 明缝一直在掩盖这个随机性;无缝化修复把缝消掉后,随机错位彻底暴露------连环坑:修掉 A(明缝)暴露 B(随机错位)。
解法:
typescript
emitter: {
size: [0, 0], // 点发射,出生位置确定
position: [x, y], // 块的格位左上角
// 瓦片尺寸精确等于格子 [tw, th],错位即露缝便于辨别
}
铁证:修复后重建结果每次完全一致(有随机时每次都不同);错位与素材横竖拍无关(对照排除)。
亮面:条带发射器的正确姿势
同一机制,用在"沿一条线撒粒子"的效果上就是正解。白点消散卡:192 批 × 每批 2 个发射器,每个发射器 size 设「线宽 × 薄条带」+ position = 条带左上角 → 一条发射器多颗粒子沿整条线随机出生。
配套参数:
- 发射持续时间 = count ÷ emitRate:emitRate 取 max(N×3, 20) → 333ms 连喷,前沿带尾
- lifetime + lifetimeRange(since 12):每颗寿命在 lifetime−range, lifetime 随机,避免"整整齐齐同时死"
判别法速查
| 症状 | 诊断 |
|---|---|
| 拼合/排版错位,每次重建都不同 | size 随机出生区在作怪 → 改 0,0 点发射 |
| 效果太"整齐",粒子挤在一点 | 正向设 size 条带 → 沿线/沿区随机出生 |
标签
#HarmonyOS #ArkUI #Particle #emitter #粒子特效 #马赛克
📹 效果演示 :本文的「白点消散/马赛克拼合」动态效果实录会发在抖音------号 581821159(天行健之初九),截图看不出的粒子细节,视频一眼就懂。
懿路向前 · AI辅助整理 · 2026-10-12