# Conflicts:
#	package-lock.json
#	package.json
This commit is contained in:
YHH
2025-07-03 09:02:37 +08:00
4 changed files with 22 additions and 13 deletions

4
package-lock.json generated
View File

@@ -1,12 +1,12 @@
{ {
"name": "@esengine/ecs-framework", "name": "@esengine/ecs-framework",
"version": "2.1.24", "version": "2.1.25",
"lockfileVersion": 3, "lockfileVersion": 3,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "@esengine/ecs-framework", "name": "@esengine/ecs-framework",
"version": "2.1.24", "version": "2.1.25",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@types/multer": "^1.4.13", "@types/multer": "^1.4.13",

View File

@@ -1,6 +1,6 @@
{ {
"name": "@esengine/ecs-framework", "name": "@esengine/ecs-framework",
"version": "2.1.24", "version": "2.1.25",
"description": "用于Laya、Cocos Creator等JavaScript游戏引擎的高性能ECS框架", "description": "用于Laya、Cocos Creator等JavaScript游戏引擎的高性能ECS框架",
"main": "bin/index.js", "main": "bin/index.js",
"types": "bin/index.d.ts", "types": "bin/index.d.ts",

View File

@@ -421,25 +421,34 @@ export class QuerySystem {
}; };
} }
let entities: Entity[]; let entities: Entity[] = [];
const archetypeResult = this.archetypeSystem.queryArchetypes(componentTypes, 'AND'); const archetypeResult = this.archetypeSystem.queryArchetypes(componentTypes, 'AND');
if (archetypeResult.archetypes.length > 0) { if (archetypeResult.archetypes.length > 0) {
this.queryStats.archetypeHits++; this.queryStats.archetypeHits++;
entities = [];
for (const archetype of archetypeResult.archetypes) { for (const archetype of archetypeResult.archetypes) {
entities.push(...archetype.entities); entities.push(...archetype.entities);
} }
} else if (componentTypes.length === 1) {
this.queryStats.indexHits++;
const indexResult = this.componentIndexManager.query(componentTypes[0]);
entities = Array.from(indexResult);
} else { } else {
const indexResult = this.componentIndexManager.queryMultiple(componentTypes, 'AND'); try {
entities = Array.from(indexResult); if (componentTypes.length === 1) {
this.queryStats.indexHits++;
const indexResult = this.componentIndexManager.query(componentTypes[0]);
entities = Array.from(indexResult);
} else {
const indexResult = this.componentIndexManager.queryMultiple(componentTypes, 'AND');
entities = Array.from(indexResult);
}
} catch (error) {
entities = [];
}
}
if (entities.length === 0 && this.entities.length > 0) {
this.queryStats.linearScans++;
entities = this.queryByLinearScan(componentTypes);
} }
// 缓存结果
this.addToCache(cacheKey, entities); this.addToCache(cacheKey, entities);
return { return {