update
This commit is contained in:
@@ -73,6 +73,16 @@ export class GirlDetailPanel extends li_BaseView {
|
||||
onLoadCT() {
|
||||
super.onLoadCT();
|
||||
this.imgItemInst.node.active = false;
|
||||
|
||||
// 检查 SceneBgVideoLayer 是否可用
|
||||
if (!this.videoLayer) {
|
||||
console.error("GirlDetailPanel: SceneBgVideoLayer.handle 未初始化");
|
||||
} else {
|
||||
console.log("GirlDetailPanel: 成功获取 SceneBgVideoLayer 实例");
|
||||
// 初始化视频显示位置
|
||||
this.initVideoPosition();
|
||||
}
|
||||
|
||||
this.refresh(this.id);
|
||||
|
||||
Utils.addInnerEL(InnerMsgCode.LanguageChange, this, () => {
|
||||
@@ -89,15 +99,6 @@ export class GirlDetailPanel extends li_BaseView {
|
||||
|
||||
this.imgToggle.callback = this.bindImgToggle.bind(this);
|
||||
this.videoToggle.callback = this.bindVideoToggle.bind(this);
|
||||
|
||||
// 检查 SceneBgVideoLayer 是否可用
|
||||
if (!this.videoLayer) {
|
||||
console.error("GirlDetailPanel: SceneBgVideoLayer.handle 未初始化");
|
||||
} else {
|
||||
console.log("GirlDetailPanel: 成功获取 SceneBgVideoLayer 实例");
|
||||
// 初始化视频显示位置
|
||||
this.initVideoPosition();
|
||||
}
|
||||
}
|
||||
|
||||
setVideEnable(enable: boolean) {
|
||||
@@ -117,69 +118,6 @@ export class GirlDetailPanel extends li_BaseView {
|
||||
}
|
||||
}
|
||||
|
||||
adjustVideoScale() {
|
||||
if (!this.videoLayer) {
|
||||
console.error("GirlDetailPanel: SceneBgVideoLayer 不可用");
|
||||
return;
|
||||
}
|
||||
|
||||
// 获取 videoArea 的尺寸
|
||||
if (!this.videoArea) {
|
||||
console.error("GirlDetailPanel: videoArea 未设置");
|
||||
return;
|
||||
}
|
||||
|
||||
// 参考原有逻辑,计算缩放比例使视频高度填满 videoArea
|
||||
const tryAdjustScale = () => {
|
||||
const videoPlayer = this.videoLayer.getVideoPlayer();
|
||||
if (!videoPlayer) return false;
|
||||
|
||||
const videoTransform = videoPlayer.node.getComponent(UITransform);
|
||||
if (videoTransform && videoTransform.height > 0) {
|
||||
// 设置视频锚点为中心 (0.5, 0.5),确保视频的中心点就是定位点
|
||||
this.videoLayer.setVideoAnchor(0.5, 0.5);
|
||||
|
||||
// 计算缩放比例,使视频高度填满 videoArea(保持原有逻辑)
|
||||
const scale = this.videoArea.height / videoTransform.height;
|
||||
|
||||
// 设置视频缩放
|
||||
this.videoLayer.setVideoScale(scale);
|
||||
|
||||
// 获取 videoArea 的世界坐标中心点
|
||||
const videoAreaWorldPos = this.videoArea.node.getWorldPosition();
|
||||
|
||||
// 使用世界坐标设置视频位置,确保正确对齐
|
||||
this.videoLayer.setVideoWorldPosition(
|
||||
videoAreaWorldPos.x,
|
||||
videoAreaWorldPos.y,
|
||||
videoAreaWorldPos.z
|
||||
);
|
||||
|
||||
console.log(
|
||||
`GirlDetailPanel: 视频缩放到 ${scale}, videoArea高度: ${this.videoArea.height}, 视频高度: ${videoTransform.height}`
|
||||
);
|
||||
console.log(
|
||||
`GirlDetailPanel: 视频世界位置设置为 (${videoAreaWorldPos.x}, ${videoAreaWorldPos.y})`
|
||||
);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
};
|
||||
|
||||
// 立即尝试一次
|
||||
if (!tryAdjustScale()) {
|
||||
// 如果失败,延迟尝试(保持原有的重试机制)
|
||||
this.scheduleOnce(() => {
|
||||
if (!tryAdjustScale()) {
|
||||
// 再次延迟尝试
|
||||
this.scheduleOnce(() => {
|
||||
tryAdjustScale();
|
||||
}, 0.5);
|
||||
}
|
||||
}, 0.1);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取目标视频尺寸
|
||||
* 从 videoArea 获取实际需要填充的区域尺寸
|
||||
@@ -244,25 +182,17 @@ export class GirlDetailPanel extends li_BaseView {
|
||||
? new Size(this.videoArea.width, this.videoArea.height)
|
||||
: new Size(600, 800);
|
||||
|
||||
// 获取 videoArea 的中心位置作为参考节点
|
||||
const bgFrameNode = this.videoArea ? this.videoArea.node : null;
|
||||
// 获取 videoArea 的中心位置作为参考节点(使用世界坐标)
|
||||
const videoAreaPos = this.videoArea
|
||||
? this.videoArea.node.getWorldPosition()
|
||||
: undefined;
|
||||
|
||||
// 使用 playLocalLoopVideo 方法,保证兼容性
|
||||
const videoData = {
|
||||
path: firstPath,
|
||||
// 使用新的统一 playVideo 方法
|
||||
this.videoLayer.playVideo(firstPath, {
|
||||
loop: true,
|
||||
size: targetSize,
|
||||
bgFrameNode: bgFrameNode, // 传递 videoArea 节点作为位置参考
|
||||
};
|
||||
this.videoLayer.playLocalLoopVideo(videoData);
|
||||
|
||||
// 延迟调整视频缩放和位置,确保视频加载完成
|
||||
this.scheduleOnce(() => {
|
||||
this.adjustVideoScale();
|
||||
}, 0.1);
|
||||
} else if (!firstPath) {
|
||||
console.warn(
|
||||
`GirlDetailPanel: 未找到视频路径 category=${this.category}, id=${this.id}`
|
||||
);
|
||||
position: videoAreaPos
|
||||
});
|
||||
}
|
||||
|
||||
let resIds = girlData.getAllDisplayGrilPhotoId(
|
||||
@@ -333,16 +263,9 @@ export class GirlDetailPanel extends li_BaseView {
|
||||
private initVideoPosition() {
|
||||
if (!this.videoLayer || !this.videoArea) return;
|
||||
|
||||
// 设置视频锚点为中心 (0.5, 0.5),这样视频的中心点就是定位点
|
||||
this.videoLayer.setVideoAnchor(0.5, 0.5);
|
||||
|
||||
// 使用 videoArea 的世界坐标位置
|
||||
const videoAreaWorldPos = this.videoArea.node.getWorldPosition();
|
||||
this.videoLayer.setVideoWorldPosition(
|
||||
videoAreaWorldPos.x,
|
||||
videoAreaWorldPos.y,
|
||||
videoAreaWorldPos.z
|
||||
);
|
||||
// 视频位置和缩放已在 playVideo 中处理
|
||||
this.videoLayer.setVideoScale(1);
|
||||
console.log(
|
||||
`GirlDetailPanel: 初始化视频世界位置到 (${videoAreaWorldPos.x}, ${videoAreaWorldPos.y})`
|
||||
|
||||
Reference in New Issue
Block a user