import { _decorator, Component, math, Node, Sprite, UITransform } from "cc"; import { Config18x } from "db://assets/Scripts/Main/Config/Config18x"; import ResManager from "db://assets/Scripts/Main/Manager/ResManager"; import { ViewManager } from "db://assets/Scripts/Main/Manager/ViewManager"; import { GButton } from "db://assets/Scripts/Main/Common/GButton"; import { GirlDetailPanel } from "../ui/panels/GirlDetailPanel"; import proto from 'db://assets/Scripts/proto/proto.pb.js'; import { DataManager, DataId } from "../data/DataManager"; import { GirlData } from "../data/GirlData"; const { ccclass, property } = _decorator; @ccclass("DetailImageItem") export class DetailImageItem extends Component { @property(Sprite) img: Sprite; @property(Node) lock: Node; @property(Node) question: Node; base: GirlDetailPanel; url: string; isImage: boolean; uitransform: UITransform; category: number; id: number; index: number; type : number; onLoad() { GButton.BandClick(this.node, this.onClickThis, this); this.uitransform = this.node.getComponent(UITransform); } onClickThis() { let data = { url: this.url, isImg: this.isImage, closeFunc: () => { this.base.setVideEnable(true); }, }; if (this.url) { ViewManager.I.openBundlesView("ShowPanel", data); this.base.setVideEnable(false); } } scaleToFillItem() { if (!this.img || !this.img.spriteFrame) return; // 延迟一帧确保UI布局完成 this.doScaleToFill(); } doScaleToFill() { if (!this.img || !this.img.spriteFrame) return; const itemSize = this.uitransform.contentSize; const imageSize = this.img.spriteFrame.originalSize; if ( itemSize.width === 0 || itemSize.height === 0 || imageSize.width === 0 || imageSize.height === 0 ) { return; } const scaleX = itemSize.width / imageSize.width; const scaleY = itemSize.height / imageSize.height; const scale = Math.max(scaleX, scaleY); // 设置Sprite的sizeMode为CUSTOM,允许自定义大小 this.img.sizeMode = Sprite.SizeMode.CUSTOM; // 获取图片节点的UITransform并设置大小 const imgTransform = this.img.node.getComponent(UITransform); if (imgTransform) { imgTransform.setContentSize( imageSize.width * scale, imageSize.height * scale ); } } refresh( base: GirlDetailPanel, type: number, category: number, id: number, index: number ) { this.base = base; this.type = type; this.category = category; this.id = id; this.index = index; this.lock.active = false; this.question.active = true; // 显示问号,表示加载中 const girlData = DataManager.I.getDataById(DataId.Girl); let imgPath = ""; if (type === 1) { // 图片 this.url = girlData.getGrilPhotoPic(this.category.toString(), this.id, this.index); imgPath = this.url; this.isImage = true; } else if (type === 2) { // 视频 this.isImage = false; this.url = girlData.getGrilVideoPath(this.category.toString(), this.id, this.index); let videoPrice = girlData.getGrilVideoPrice(this.category.toString(), this.id, this.index); if (videoPrice > 0) { imgPath = this.url + "_thumbnail_blur"; } else { imgPath = this.url + "_thumbnail"; } } ResManager.I.changeBundleSpriteFrame(this.img, imgPath, "Chat18x", () => { this.question.active = false; // 图片加载成功后隐藏问号 this.scaleToFillItem(); }); } }