| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- import { _decorator, instantiate, Label, Node, Sprite, NodePool } from 'cc';
- import { UIView } from '@scripts/framework/ui/UIView';
- import { AppKernel } from '@scripts/app/AppKernel';
- import { UIViewID } from '@scripts/define/UIDefine';
- import { addBtnClick } from '@scripts/utils/UIHelper';
- import { setSpriteFrame } from '@scripts/utils/ResHelper';
- const { ccclass, property } = _decorator;
- @ccclass('RewardView')
- export class RewardView extends UIView {
- readonly viewId = UIViewID.RewardView;
- @property(Node)
- private btn_receive: Node;
- @property(Node)
- private temp_item: Node;
- @property(Node)
- private rewards: Node;
- private _callback: Function;
- // 对象池
- private _itemPool: NodePool = new NodePool();
- // 当前正在使用的节点列表
- private _usedItems: Node[] = [];
- protected onBeforeOpen(param: any) {
- console.log('RewardView onBeforeOpen', param);
- const { reward, callback } = param;
- if (callback) this._callback = callback;
- this.updateView(reward);
- }
- protected onCreate(): void | Promise<void> {
- addBtnClick(this.btn_receive, this.onBtnReceiveClick, this);
- }
- private updateView(param: any) {
- for (const node of this._usedItems) {
- this._itemPool.put(node);
- }
- this._usedItems.length = 0;
- // 遍历奖励对象
- for (const [key, val] of Object.entries(param)) {
- let itemNode: Node;
- if (this._itemPool.size() > 0) {
- itemNode = this._itemPool.get();
- } else {
- itemNode = instantiate(this.temp_item);
- }
- itemNode.active = true;
- itemNode.parent = this.rewards;
- // 填充UI
- const num = itemNode.getChildByName('num');
- num.getComponent(Label).string = `${(Number(val) / 100).toFixed(2)}`;
- const icon = itemNode.getChildByName('icon');
- const iconCmp = icon.getComponent(Sprite);
- setSpriteFrame(iconCmp, "textures/reward/" + key);
- this._usedItems.push(itemNode);
- }
- }
- private onBtnReceiveClick() {
- this._callback && this._callback();
- AppKernel.ui.close(UIViewID.RewardView);
- }
- protected async onClose(_reason) {
- for (const node of this._usedItems) {
- this._itemPool.put(node);
- }
- this._usedItems.length = 0;
- }
- // 弹窗彻底销毁,清空池子释放资源
- protected onDestroy() {
- this._itemPool.clear();
- super.onDestroy();
- }
- }
|