基类 / ModuleC
ModuleC<T, S> Class
客户端模块的基类
所有的客户端模块都必须继承这个类,才能被 ModuleService 管理。
注意:继承自 ModuleC 类中的方法名。当方法名前缀为"net_XXX"的方法才能在继承 ModuleS 中调用。
在 Script 类中说过,继承自 Script 的类享受onStart、OnUpdate、OnDestroy脚本的生命周期,在此基础之上,当在onStart()函数中注册了客户端服务端以及数据模块之后
ModuleService.registerModule(YourModS, YourModC, YourData);
使用示例:创建一个名为ModuleCExample的脚本,放置在对象栏中,打开脚本,将原本内容修改为如下内容,保存并运行游戏,客户端日志会输出player模块每个生命周期执行的日志,按下F键你将在客户端以及服务端日志中看到玩家等级的信息ts
@Component
export default class ModuleCExample extends Script {
protected onStart(): void {
ModuleService.registerModule(PlayerModuleS, PlayerModuleC, PlayerModuleData);
}
}
class PlayerModuleC extends ModuleC<PlayerModuleS, PlayerModuleData>{
protected onAwake(): void {
console.log("-----------player模块创建模块-----------");
}
protected onStart(): void {
console.log("-----------player模块开始-----------");
//输出当前玩家的等级
let playerData = this.data;
console.log("玩家等级:", playerData.getlevel());
playerData.onDataChange.add(() => {
//玩家数据发生变化时,输出当前玩家的等级
console.log("玩家等级:", playerData.getlevel());
})
InputUtil.onKeyDown(Keys.F, () => {
this.server.net_LevelUp();
})
}
protected onEnterScene(sceneType: number): void {
console.log("-----------player模块进入场景-----------");
}
protected onUpdate(dt: number): void {
//每帧调用 dt为两帧之间的时间差
// console.log("-----------player模块更新-----------"+dt);
}
protected onDestroy(): void {
console.log("-----------player模块销毁-----------");
}
}
class PlayerModuleS extends ModuleS<PlayerModuleC, PlayerModuleData>{
//玩家升级
public net_LevelUp(): void {
//调用该函数的客户端玩家
let player = this.currentPlayer;
//调用该函数的客户端玩家id
let playerId = this.currentPlayerId;
//调用该函数的客户端玩家数据
let playerData = this.currentData;
playerData.levelUp();
console.log("玩家等级:", playerData.getlevel());
}
}
class PlayerModuleData extends Subdata {
@Decorator.persistence()
private level: number;
protected initDefaultData(): void {
this.level = 0;
}
public getlevel(): number {
return this.level;
}
public levelUp(): void {
this.level++;
//保存数据
this.save(true);
}
}
@Component
export default class ModuleCExample extends Script {
protected onStart(): void {
ModuleService.registerModule(PlayerModuleS, PlayerModuleC, PlayerModuleData);
}
}
class PlayerModuleC extends ModuleC<PlayerModuleS, PlayerModuleData>{
protected onAwake(): void {
console.log("-----------player模块创建模块-----------");
}
protected onStart(): void {
console.log("-----------player模块开始-----------");
//输出当前玩家的等级
let playerData = this.data;
console.log("玩家等级:", playerData.getlevel());
playerData.onDataChange.add(() => {
//玩家数据发生变化时,输出当前玩家的等级
console.log("玩家等级:", playerData.getlevel());
})
InputUtil.onKeyDown(Keys.F, () => {
this.server.net_LevelUp();
})
}
protected onEnterScene(sceneType: number): void {
console.log("-----------player模块进入场景-----------");
}
protected onUpdate(dt: number): void {
//每帧调用 dt为两帧之间的时间差
// console.log("-----------player模块更新-----------"+dt);
}
protected onDestroy(): void {
console.log("-----------player模块销毁-----------");
}
}
class PlayerModuleS extends ModuleS<PlayerModuleC, PlayerModuleData>{
//玩家升级
public net_LevelUp(): void {
//调用该函数的客户端玩家
let player = this.currentPlayer;
//调用该函数的客户端玩家id
let playerId = this.currentPlayerId;
//调用该函数的客户端玩家数据
let playerData = this.currentData;
playerData.levelUp();
console.log("玩家等级:", playerData.getlevel());
}
}
class PlayerModuleData extends Subdata {
@Decorator.persistence()
private level: number;
protected initDefaultData(): void {
this.level = 0;
}
public getlevel(): number {
return this.level;
}
public levelUp(): void {
this.level++;
//保存数据
this.save(true);
}
}
Type parameters
T | T |
---|---|
S | extends Subdata |
Hierarchy
ModuleC
Table of contents
Accessors
data(): S |
---|
本地玩家的模块数据 |
localPlayer(): Player client |
获取当前玩家 |
localPlayerId(): number client |
获取当前玩家ID |
server(): T client |
和自己绑定的服务端模块,可通过此对象直接调用net_开头的服务端方法 |
Methods
onAwake(): void client |
---|
生命周期方法-创建模块时调用 |
onDestroy(): void client |
生命周期方法-销毁模块调用 |
onEnterScene(sceneType : number ): void client |
生命周期方法-进入场景调用 |
onExecute(type : number , ...params : any []): void client |
外部调用本模块的某个操作 |
onStart(): void client |
生命周期方法-启动模块时调用 |
onUpdate(dt : number ): void client |
生命周期方法-刷新模块调用 |
Type parameters
T | T |
---|---|
S | extends Subdata <S > |
Accessors
data
• | ||
---|---|---|
本地玩家的模块数据 Returns
|
localPlayer
• | ||
---|---|---|
获取当前玩家 Returns
|
localPlayerId
• | ||
---|---|---|
获取当前玩家ID Returns
|
server
• |
---|
和自己绑定的服务端模块,可通过此对象直接调用net_开头的服务端方法 Returns |
T |
---|
Methods
onAwake
• Protected
onAwake(): void
client
生命周期方法-创建模块时调用
onDestroy
• Protected
onDestroy(): void
client
生命周期方法-销毁模块调用
onEnterScene
• Protected
onEnterScene(sceneType
): void
client
生命周期方法-进入场景调用
Parameters
sceneType number | 场景类型(预留) range: type: |
---|
onExecute
• Protected
onExecute(type
, ...params
): void
client
外部调用本模块的某个操作
Parameters
type number | 操作类型 range: type: |
---|---|
...params any [] | 操作参数 |
onStart
• Protected
onStart(): void
client
生命周期方法-启动模块时调用
onUpdate
• Protected
onUpdate(dt
): void
client
生命周期方法-刷新模块调用
Parameters
dt number | 两帧之间的时间差(单位:秒) range: type:浮点数 |
---|