|
@@ -55,24 +55,44 @@ export class Effect2DUIMgr {
|
|
|
|
|
|
/** 龙卷风添加信息预设*/
|
|
/** 龙卷风添加信息预设*/
|
|
async addPlayerInfo(target: Node, playerInfo: PlayerInfo) {
|
|
async addPlayerInfo(target: Node, playerInfo: PlayerInfo) {
|
|
- let infoNode = this.playerInfoMap.get(target) as any;
|
|
|
|
|
|
+ // 1. 使用占位符防止重复创建
|
|
|
|
+ if (this.playerInfoMap.has(target)) {
|
|
|
|
+ const existing = this.playerInfoMap.get(target);
|
|
|
|
+ if (existing instanceof Node) {
|
|
|
|
+ // 已有节点直接更新位置
|
|
|
|
+ const uiPos = GameUtil.worldToScreenLocal(target);
|
|
|
|
+ const offsetY = 250;
|
|
|
|
+ const offsetX = 70;
|
|
|
|
+ existing.setPosition(uiPos.x + offsetX, uiPos.y + offsetY);
|
|
|
|
+ }
|
|
|
|
+ return; // 正在加载或已存在
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 2. 设置加载占位符
|
|
|
|
+ this.playerInfoMap.set(target, null);
|
|
|
|
+ try {
|
|
|
|
+ const infoPrefab = await resLoader.loadAsync(
|
|
|
|
+ resLoader.gameBundleName,
|
|
|
|
+ "Prefabs/PlayerInfo",
|
|
|
|
+ Prefab
|
|
|
|
+ );
|
|
|
|
|
|
- if (!infoNode) {
|
|
|
|
- const infoPrefab = await resLoader.loadAsync(resLoader.gameBundleName, "Prefabs/PlayerInfo");
|
|
|
|
- infoNode = instantiate(infoPrefab);
|
|
|
|
|
|
+ const infoNode = instantiate(infoPrefab);
|
|
infoNode.parent = StormSunderGlobalInstance.instance.effectUI;
|
|
infoNode.parent = StormSunderGlobalInstance.instance.effectUI;
|
|
- this.playerInfoMap.set(target, infoNode);
|
|
|
|
|
|
|
|
const playerInfoComp = infoNode.getComponent(PlayerInfoComponent);
|
|
const playerInfoComp = infoNode.getComponent(PlayerInfoComponent);
|
|
- if (playerInfoComp) {
|
|
|
|
- playerInfoComp.updateInfo(playerInfo);
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
|
|
+ playerInfoComp?.updateInfo(playerInfo);
|
|
|
|
|
|
- const uiPos = GameUtil.worldToScreenLocal(target).clone();
|
|
|
|
- const offsetY = 250;
|
|
|
|
- const offsetX = 70;
|
|
|
|
- infoNode.setPosition(uiPos.x + offsetX, uiPos.y + offsetY);
|
|
|
|
|
|
+ const uiPos = GameUtil.worldToScreenLocal(target);
|
|
|
|
+ const offsetY = 250;
|
|
|
|
+ const offsetX = 70;
|
|
|
|
+ infoNode.setPosition(uiPos.x + offsetX, uiPos.y + offsetY);
|
|
|
|
+ this.playerInfoMap.set(target, infoNode);
|
|
|
|
+ } catch (error) {
|
|
|
|
+ // 异常处理:移除占位符允许重试
|
|
|
|
+ this.playerInfoMap.delete(target);
|
|
|
|
+ console.error("加载玩家信息失败:", error);
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
//更新对应玩家信息
|
|
//更新对应玩家信息
|