给棋子添加花色
棋子目前没有花色。因此,我们給棋子增加花色。
首先我们的花色资源目录为:
assets/Match3/yang/SpriteFrames/pai/
这里有一个文件夹关键字 SpriteFrames,这个文件夹关键字用来识别动态加载的图片资源(这是我自己定义的,不是引擎定义的)。然后通过自动化脚本生成配置文件: assets/GScript/auto/SpriteFramesCfg.ts
先提供一个 API setDisplay(style: number) 来设置棋子的花色.
/**
* !!! 本文件由下方脚本自动生成,请勿手动修改.
* !!! /Users/z/Desktop/CCYang/_tool/nodejs/src/app/gen_res_cfg/gen.ts
*/
import { BL } from "db://assets/GScript/core/modules/res/ResConst";
export class SpriteFramesCfg {
// -------- Match3BN --------
static pai = (key: string | number) => BL(`yang/SpriteFrames/pai/${key}/spriteFrame`, "Match3BN");
}
目前,共提供了 30 个资源,因此其 key 为 pai-1, pai-2, …, pai-30
首先在 ResLoader.ts 中补充资源收集的通用接口:
/** 新增通用接口 */
addAsset(bUrl: IBundleUrl, type: Constructor<Asset> | null) {
this.toLoadAssets.push({
type: type,
bUrl: bUrl
});
return this;
}
然后补充特殊接口 addSpriteFrame,并修改旧的 addUI 接口中增加预制体的部分:
addSpriteFrame(bUrl: IBundleUrl) { return this.addAsset(bUrl, SpriteFrame) }
addUI<UI extends Component>(uiClass: Constructor<UI>) {
this.addAsset(getUIClassBUrl(uiClass), Prefab);
if (typeof uiClass['R'] === "function") {
(uiClass['R'] as Function).call(uiClass, this);
}
return this;
}
现在我们可以在 Match3UI.ts 的资源收集接口中添加棋子花色的资源,以预加载好所有的花色资源
@ccclass('Match3UI')
export class Match3UI extends Component {
static R(loader: ResLoader) {
loader.addUI(Match3ZiUE);
for (let i = 1; i <= 30; ++i) {
loader.addSpriteFrame(SpriteFramesCfg.pai(`pai-${i}`))
}
}
}
在 ResManager.ts 中补充获取资源的方法:
getAsset<T extends Asset>(bUrl: IBundleUrl, type?: Constructor<T> | null): T {
let assetBundle = assetManager.getBundle(bUrl.b);
return assetBundle.get(bUrl.l, type)
}
在 Match3ZiUE.ts 中新增设置牌面花色的 API:
setDisplay(style: number) {
let spriteFrame = gtr.res.getAsset(SpriteFramesCfg.pai(`pai-${style}`), SpriteFrame);
this.sprite.spriteFrame = spriteFrame;
}
(备注:因为之前没有设计好命名,导致其使用起来不是很方便。实际命名从 0-29 会好用很多,这里就不修改了。)
最后,我们在 Match3UI.ts 中先统一设置花色为 1
ziUE.setDisplay(1)
结果符合预期: