新增worker-system文档及源码示例

This commit is contained in:
YHH
2025-09-28 20:03:29 +08:00
parent cf2dc91af6
commit 1dfcd008aa
20 changed files with 2697 additions and 19 deletions

File diff suppressed because one or more lines are too long

View File

@@ -11914,9 +11914,10 @@ let PhysicsWorkerSystem = class extends WorkerEntitySystem {
{
enableWorker,
workerCount: navigator.hardwareConcurrency || 2,
// 恢复多Worker
systemConfig: defaultConfig,
useSharedArrayBuffer: true
// 用SharedArrayBuffer优化
// 使用SharedArrayBuffer进行全局碰撞检测
}
);
this.physicsConfig = {
@@ -11948,7 +11949,8 @@ let PhysicsWorkerSystem = class extends WorkerEntitySystem {
/**
* Worker处理函数 - 纯函数会被序列化到Worker中执行
* 注意这个函数内部不能访问外部变量必须是纯函数
* 添加了小球间碰撞检测大大增加计算复杂度
* 非SharedArrayBuffer模式每个Worker只能看到分配给它的实体批次
* 这会导致跨批次的碰撞检测缺失但单批次内的碰撞是正确的
*/
workerProcess(entities, deltaTime, systemConfig) {
const config = systemConfig || {
@@ -12023,7 +12025,7 @@ let PhysicsWorkerSystem = class extends WorkerEntitySystem {
return result;
}
/**
* 应用处理结果 - 将Worker计算结果应用回组件
* 应用处理结果
*/
applyResult(entity, result) {
if (!entity || !entity.enabled) {
@@ -12051,7 +12053,7 @@ let PhysicsWorkerSystem = class extends WorkerEntitySystem {
return { ...this.physicsConfig };
}
/**
* 性能监控 - 重写onEnd来计算执行时间
* 性能监控
*/
onEnd() {
super.onEnd();
@@ -12060,7 +12062,7 @@ let PhysicsWorkerSystem = class extends WorkerEntitySystem {
window.physicsExecutionTime = executionTime;
}
/**
* 获取实体数据大小 - 物理系统使用9个Float32值
* 获取实体数据大小
*/
getDefaultEntityDataSize() {
return 9;
@@ -12086,7 +12088,7 @@ let PhysicsWorkerSystem = class extends WorkerEntitySystem {
sharedArray[dataOffset + 8] = entityData.radius;
}
/**
* 性能监控 - 重写onBegin来记录开始时间
* 性能监控开始
*/
onBegin() {
super.onBegin();
@@ -12113,8 +12115,7 @@ let PhysicsWorkerSystem = class extends WorkerEntitySystem {
};
}
/**
* 提供SharedArrayBuffer处理函数 - 物理系统的具体实现
* 包含小球间碰撞检测的复杂计算
* SharedArrayBuffer处理函数
*/
getSharedArrayBufferProcessFunction() {
return function(sharedFloatArray, startIndex, endIndex, deltaTime, systemConfig) {
@@ -12214,11 +12215,9 @@ let PhysicsWorkerSystem = class extends WorkerEntitySystem {
const impulseY = impulseScalar * ny;
dx1 -= impulseX / mass1;
dy1 -= impulseY / mass1;
if (i < j) {
const energyLoss = 0.98;
dx1 *= energyLoss;
dy1 *= energyLoss;
}
const energyLoss = 0.98;
dx1 *= energyLoss;
dy1 *= energyLoss;
}
}
sharedFloatArray[offset1 + 1] = x1;

View File

@@ -118,7 +118,7 @@
color: #ff4a4a;
}
</style>
<script type="module" crossorigin src="/ecs-framework/demos/worker-system/assets/index-a4a166b2.js"></script>
<script type="module" crossorigin src="/ecs-framework/demos/worker-system/assets/index-83126548.js"></script>
</head>
<body>
<div class="container">