拓展 / BagModule
BagModule Class
背包实例
背包系统就像你在玩游戏时使用的一个特殊的背包,可以帮助你管理和存放各种物品和资源。MW编辑器已经封装好了一个可以直接使用的背包系统。
你的角色在游戏中收集了很多宝贵的物品,比如武器、装备、药品、材料等等。这些物品都需要一个地方来储存,而背包系统就是一个虚拟的背包,可以容纳这些物品。
它就是一个游戏中的特殊工具,帮助你整理、存储和管理你在游戏中收集到的各种物品和资源,让你的游戏体验更加方便和有序。
使用示例:创建一个名为BagExample的脚本,放置在对象栏中,打开脚本,将原本内容修改为如下内容,保存并运行游戏ts
@Component
export default class BagExample extends Script {
protected onStart(): void {
BagModule.registerItem(1,"37692","金铲铲",ItemQuality.Legend,10,{a:1,b:2});
BagModule.registerItem(2,"37690","小喇叭",ItemQuality.Legend,10,{a:1,b:2});
BagModule.registerItem(3,"37697","金币",ItemQuality.Legend,10,{a:1,b:2});
BagModule.registerItem(4,"37695","南瓜",ItemQuality.Common,20,{a:1,b:2});
if(SystemUtil.isClient()){
BagModule.addItemClickListener(this.onItemClick,this);
BagModule.addItem(1,1);
BagModule.addItem(2,5);
BagModule.addItem(3,10);
BagModule.addItem(4,30);
BagModule.open();
}
}
private onItemClick(cfg:ItemConfig){
console.log("点击了",cfg);
}
}
@Component
export default class BagExample extends Script {
protected onStart(): void {
BagModule.registerItem(1,"37692","金铲铲",ItemQuality.Legend,10,{a:1,b:2});
BagModule.registerItem(2,"37690","小喇叭",ItemQuality.Legend,10,{a:1,b:2});
BagModule.registerItem(3,"37697","金币",ItemQuality.Legend,10,{a:1,b:2});
BagModule.registerItem(4,"37695","南瓜",ItemQuality.Common,20,{a:1,b:2});
if(SystemUtil.isClient()){
BagModule.addItemClickListener(this.onItemClick,this);
BagModule.addItem(1,1);
BagModule.addItem(2,5);
BagModule.addItem(3,10);
BagModule.addItem(4,30);
BagModule.open();
}
}
private onItemClick(cfg:ItemConfig){
console.log("点击了",cfg);
}
}
Table of contents
Accessors
capacity(): number client |
---|
背包容量 |
dragEnabled(): boolean client |
是否可以拖拽 |
labelVisible(): boolean client |
物品名称是否可见 |
searchEnabled(): boolean client |
是否显示搜索框 |
Methods
addItem(itemId : number , count? : number , player? : Player ): Promise <number > |
---|
添加道具 |
addItemClickListener(clickCallback : (cfg : ItemConfig ) => void , thisObject : any ): typeof BagModule client |
增加道具点击回调 |
close(player? : Player ): typeof BagModule |
关闭背包界面 |
getItemCount(itemId : number , player? : Player ): number |
获取背包指定道具数量 |
open(player? : Player ): typeof BagModule |
打开背包界面 |
registerItem(itemId : number , icon : string , name : string , quality? : ItemQuality , stackCount? : number , customData? : any ): typeof BagModule |
背包注册道具信息,道具需要在客户端注册 |
removeItem(itemId : number , count? : number , player? : Player ): typeof BagModule |
删除道具 |
removeItemClickListener(clickCallback : (cfg : ItemConfig ) => void , thisObject : any ): typeof BagModule client |
移除道具点击回调 |
skin(bagSkin : (...args : any []) => IBagSkin , itemSkin : (...args : any []) => IBagItemSkin , itemBgSkin : (...args : any []) => UIScript , deleteDialogSkin : (...args : any []) => IItemDeleteSkin ): typeof BagModule client |
设置背包皮肤 |
sort(): typeof BagModule client |
整理背包 |
Accessors
capacity
• | • | ||||
---|---|---|---|---|---|
背包容量 Returns
| 背包容量 Parameters
|
dragEnabled
• | • | ||||
---|---|---|---|---|---|
是否可以拖拽 Returns
| 是否可以拖拽 Parameters
|
labelVisible
• | • | ||||
---|---|---|---|---|---|
物品名称是否可见 Returns
| 物品名称是否可见 Parameters
|
searchEnabled
• | • | ||||
---|---|---|---|---|---|
是否显示搜索框 Returns
| 是否显示搜索框 Parameters
|
Methods
addItem
• Static
addItem(itemId
, count?
, player?
): Promise
<number
>
添加道具
Parameters
itemId number | 道具ID range: 不做限制 type: 整数 |
---|---|
count? number | 道具数量 default:1 range: 不做限制 type: 整数 |
player? Player | 道具所有者 default:服务端必传入 |
Returns
Promise <number > | 返回添加的道具数量,如果添加失败则返回0 |
---|
ts
@Component
export default class BagExample extends Script {
protected onStart(): void {
BagModule.registerItem(1,"37692","金铲铲",ItemQuality.Legend,10,{a:1,b:2});
if (SystemUtil.isServer()) return;
BagModule.addItem(1).then((count:number)=>{
console.log("添加道具数量",count);
});
BagModule.open();
}
@Component
export default class BagExample extends Script {
protected onStart(): void {
BagModule.registerItem(1,"37692","金铲铲",ItemQuality.Legend,10,{a:1,b:2});
if (SystemUtil.isServer()) return;
BagModule.addItem(1).then((count:number)=>{
console.log("添加道具数量",count);
});
BagModule.open();
}
addItemClickListener
• Static
addItemClickListener(clickCallback
, thisObject
): typeof BagModule
client
增加道具点击回调
Parameters
clickCallback (cfg : ItemConfig ) => void | 点击回调 |
---|---|
thisObject any | 调用上下文 |
Returns
typeof BagModule | 返回背包实例 |
---|
close
• Static
close(player?
): typeof BagModule
关闭背包界面
Parameters
player? Player | 服务端调用时需要传入player default:服务端必传入 |
---|
Returns
typeof BagModule | 返回背包实例 |
---|
getItemCount
• Static
getItemCount(itemId
, player?
): number
获取背包指定道具数量
Parameters
itemId number | 道具ID range: 根据道具ID确定 type: 整数 |
---|---|
player? Player | 服务端传入,打开指定玩家的背包 default:服务端必传入 |
Returns
number | 返回背包实例 |
---|
open
• Static
open(player?
): typeof BagModule
打开背包界面
Parameters
player? Player | 背包的所有者 default:服务端填写,客户端不填写 |
---|
Returns
typeof BagModule | 返回背包实例 |
---|
registerItem
• Static
registerItem(itemId
, icon
, name
, quality?
, stackCount?
, customData?
): typeof BagModule
背包注册道具信息,道具需要在客户端注册
Parameters
itemId number | 道具ID range: 根据道具ID确定 type: 整数 |
---|---|
icon string | 道具图片 range: 不做限制 |
name string | 名称 range: 不做限制 |
quality? ItemQuality | 道具品质-默认普通 default:ItemQuality.Common |
stackCount? number | 堆叠数量 default:1 range: 不做限制 type: 整数 |
customData? any | 额外数据 default:null |
Returns
typeof BagModule | 返回背包实例 |
---|
这样就注册了4个道具,然后通过BagModule.addItem添加对应ID在背包中就可以看到这4个道具了
ts
@Component
export default class BagExample extends Script {
protected onStart(): void {
BagModule.registerItem(1,"37692","金铲铲",ItemQuality.Legend,10,{a:1,b:2});
BagModule.registerItem(2,"37690","小喇叭",ItemQuality.Legend,10,{a:1,b:2});
BagModule.registerItem(3,"37697","金币",ItemQuality.Legend,10,{a:1,b:2});
BagModule.registerItem(4,"37695","南瓜",ItemQuality.Common,20,{a:1,b:2});
}
}
@Component
export default class BagExample extends Script {
protected onStart(): void {
BagModule.registerItem(1,"37692","金铲铲",ItemQuality.Legend,10,{a:1,b:2});
BagModule.registerItem(2,"37690","小喇叭",ItemQuality.Legend,10,{a:1,b:2});
BagModule.registerItem(3,"37697","金币",ItemQuality.Legend,10,{a:1,b:2});
BagModule.registerItem(4,"37695","南瓜",ItemQuality.Common,20,{a:1,b:2});
}
}
removeItem
• Static
removeItem(itemId
, count?
, player?
): typeof BagModule
删除道具
Parameters
itemId number | 道具ID range: 根据道具ID确定 type: 整数 |
---|---|
count? number | 道具数量 default:1 range: 不做限制 type: 整数 |
player? Player | 道具所有者,服务端必传入 default:服务端必传入 |
Returns
typeof BagModule | 返回背包实例 |
---|
removeItemClickListener
• Static
removeItemClickListener(clickCallback
, thisObject
): typeof BagModule
client
移除道具点击回调
Parameters
clickCallback (cfg : ItemConfig ) => void | 点击回调 |
---|---|
thisObject any | 调用上下文 |
Returns
typeof BagModule | 返回背包实例 |
---|
skin
• Static
skin(bagSkin
, itemSkin
, itemBgSkin
, deleteDialogSkin
): typeof BagModule
client
设置背包皮肤
Parameters
bagSkin (...args : any []) => IBagSkin | 背包UI皮肤,null为默认皮肤 |
---|---|
itemSkin (...args : any []) => IBagItemSkin | 背包Item皮肤,null为默认皮肤 |
itemBgSkin (...args : any []) => UIScript | 背包Item背景皮肤,null为默认皮肤 |
deleteDialogSkin (...args : any []) => IItemDeleteSkin | 背包Item删除弹窗皮肤,null为默认皮肤 |
Returns
typeof BagModule | 返回背包实例 |
---|
1.在项目中创建一个UI,名为BagUI,拖入以下控件 closeBtn: mw.StaleButton; content: mw.Canvas; filterBox: mw.InputBox; filterCanvas: mw.Canvas; 2.导出UI,将导出的UI文件BagUI_Generate拷贝到JavaScripts文件夹,重命名为BagSkin,并修改extends为BagUI 创建一个名为BagExample的脚本,放置在对象栏中,打开脚本,将原本内容修改为如下内容,保存并运行游戏 3.其他UI皮肤同理
ts
@Component
export default class BagExample extends Script {
protected onStart(): void {
if (!SystemUtil.isServer()) return;
BagModule.skin(BagSkin, null, null, null);
BagModule.open();
}
}
@Component
export default class BagExample extends Script {
protected onStart(): void {
if (!SystemUtil.isServer()) return;
BagModule.skin(BagSkin, null, null, null);
BagModule.open();
}
}
sort
• Static
sort(): typeof BagModule
client
整理背包
Returns
typeof BagModule | 返回背包实例 |
---|