imageItem 缓存池

This commit is contained in:
2025-09-15 11:55:22 +08:00
parent bef2efc7e3
commit cdfb9b2b17
6 changed files with 176 additions and 245 deletions
@@ -4,7 +4,6 @@ import {
Node,
Sprite,
VideoPlayer,
instantiate,
UITransform,
Size,
Vec3,
@@ -14,6 +13,7 @@ import li_BaseView from "db://assets/Scripts/Main/Common/li_BaseView";
import ResManager from "db://assets/Scripts/Main/Manager/ResManager";
import { DetailImageItem } from "../../uiitems/DetailImageItem";
import { NavigationManager, PanelType } from "../../manager/NavigationManager";
import { DetailImageItemPool } from "../../manager/DetailImageItemPool";
import { ConfigManager } from "../../manager/ConfigManager";
import LanguageUtils from "../../../Main/Common/LanguageUtils";
import Utils from "../../../Main/Common/Utils";
@@ -82,6 +82,8 @@ export class GirlDetailPanel extends li_BaseView {
//this.refresh();
DetailImageItemPool.Instance.setTemplate(this.imgItemInst.node);
Utils.addInnerEL(InnerMsgCode.LanguageChange, this, () => {
this.girlName.string = LanguageUtils.getText(this.nameKey);
let desc = "";
@@ -279,35 +281,22 @@ export class GirlDetailPanel extends li_BaseView {
resIds: number[]
) {
for (let i = this.imgsLayout.children.length - 1; i >= 0; i--) {
this.imgsLayout.children[i].destroy();
DetailImageItemPool.Instance.put(this.imgsLayout.children[i]);
}
let count = resIds.length;
for (let i = 0; i < count; i++) {
let newNode = instantiate(this.imgItemInst.node);
let item = newNode.getComponent(DetailImageItem);
let resId = resIds[i];
item.refresh(this, type, category, id, resId);
newNode.active = true;
this.imgsLayout.addChild(newNode);
let newNode = DetailImageItemPool.Instance.get();
if (newNode) {
let item = newNode.getComponent(DetailImageItem);
let resId = resIds[i];
item.refresh(this, type, category, id, resId);
newNode.active = true;
this.imgsLayout.addChild(newNode);
}
}
}
/**
* 初始化视频位置和属性
*/
private initVideoPosition() {
if (!this.videoLayer || !this.videoArea) return;
// 使用 videoArea 的世界坐标位置
const videoAreaWorldPos = this.videoArea.node.getWorldPosition();
// 视频位置和缩放已在 playVideo 中处理
//this.videoLayer.setVideoScale(1);
console.log(
`GirlDetailPanel: 初始化视频世界位置到 (${videoAreaWorldPos.x}, ${videoAreaWorldPos.y})`
);
}
OnClickChatBtn() {
// 使用带过渡动画的导航方法
NavigationManager.Instance.switchToPanel(PanelType.CHAT);
@@ -340,6 +329,11 @@ export class GirlDetailPanel extends li_BaseView {
//console.log("GirlDetailPanel: 销毁时停止视频播放");
}
// 回收所有使用中的节点到对象池
for (let i = this.imgsLayout.children.length - 1; i >= 0; i--) {
DetailImageItemPool.Instance.put(this.imgsLayout.children[i]);
}
super.onDestroy();
}
}