基类 / ModuleS
ModuleS<T, S> Class
服务端模块的基类
所有的服务端模块都必须继承这个类,才能被 ModuleService 管理。
注意:继承自 ModuleS 类中的方法名。当方法名前缀为"net_XXX"的方法才能在客户端中调用。
在 Script 类中说过,继承自 Script 的类享受onStart()、onUpdate()、onDestroy() 脚本的生命周期,在此基础之上,当在onStart()函数中注册了客户端服务端以及数据模块之后
ModuleService.registerModule(YourModS, YourModC, YourData);
继承自 ModuleS 的类也封装了一套生命周期。
继承自 ModuleS 的生命周期为:
使用示例:创建一个名为ModuleSExample的脚本,放置在对象栏中,打开脚本,将原本内容修改为如下内容,保存并运行游戏,服务端日志会输出player模块每个生命周期执行的日志,按下F键你将在服务端日志中看到玩家等级的信息。ts
@Component
export default class ModuleSExample extends Script {
protected onStart(): void {
ModuleService.registerModule(PlayerModuleS, PlayerModuleC, PlayerModuleData);
}
}
class PlayerModuleC extends ModuleC<PlayerModuleS, PlayerModuleData>{
protected onStart(): void {
InputUtil.onKeyDown(Keys.F, () => {
this.server.net_LevelUp();
})
}
}
class PlayerModuleS extends ModuleS<PlayerModuleC, PlayerModuleData>{
protected onAwake(): void {
console.log("-----------服务端-player模块创建模块-----------");
}
protected onStart(): void {
console.log("-----------服务端-player模块开始-----------");
}
protected onPlayerEnterGame(player: Player): void {
console.log("-----------服务端-player模块玩家进入游戏-----------");
}
protected onPlayerJoined(player: Player): void {
console.log("-----------服务端-player模块玩家加入-----------");
}
protected onPlayerLeft(player: Player): void {
console.log("-----------服务端-player模块玩家离开-----------");
}
protected onUpdate(dt: number): void {
//每帧调用 dt为两帧之间的时间差
// console.log("-----------服务端-player模块更新-----------"+dt);
}
//玩家升级
public net_LevelUp(): void {
//调用该函数的客户端玩家数据
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 ModuleSExample extends Script {
protected onStart(): void {
ModuleService.registerModule(PlayerModuleS, PlayerModuleC, PlayerModuleData);
}
}
class PlayerModuleC extends ModuleC<PlayerModuleS, PlayerModuleData>{
protected onStart(): void {
InputUtil.onKeyDown(Keys.F, () => {
this.server.net_LevelUp();
})
}
}
class PlayerModuleS extends ModuleS<PlayerModuleC, PlayerModuleData>{
protected onAwake(): void {
console.log("-----------服务端-player模块创建模块-----------");
}
protected onStart(): void {
console.log("-----------服务端-player模块开始-----------");
}
protected onPlayerEnterGame(player: Player): void {
console.log("-----------服务端-player模块玩家进入游戏-----------");
}
protected onPlayerJoined(player: Player): void {
console.log("-----------服务端-player模块玩家加入-----------");
}
protected onPlayerLeft(player: Player): void {
console.log("-----------服务端-player模块玩家离开-----------");
}
protected onUpdate(dt: number): void {
//每帧调用 dt为两帧之间的时间差
// console.log("-----------服务端-player模块更新-----------"+dt);
}
//玩家升级
public net_LevelUp(): void {
//调用该函数的客户端玩家数据
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
ModuleS
Table of contents
Accessors
currentData(): S |
---|
调用服务器方法的玩家的DataOwner |
currentPlayer(): Player server |
调用服务器方法的玩家 |
currentPlayerId(): number server |
获取调用服务器方法的玩家ID |
Methods
getAllClient(): T server |
---|
获取"全部客户端"调用对象 |
getClient(player : number Player ): T server |
根据玩家获取"单客户端"调用对象 |
getPlayerData(player : string number Player ): S server |
获取指定玩家的本模块数据 |
onAwake(): void server |
生命周期方法-创建模块时调用 |
onDestroy(): void server |
生命周期方法-销毁模块调用 |
onExecute(type : number , ...params : any []): void server |
外部调用本模块的某个操作 |
onPlayerEnterGame(player : Player ): void server |
生命周期方法-玩家进入游戏(客户端已就绪,数据就绪,前后端可正常通信) |
onPlayerJoined(player : Player ): void server |
生命周期方法-玩家进入房间(玩家刚刚连进服务器,数据和前后端通信都还没有就绪) |
onPlayerLeft(player : Player ): void server |
生命周期方法-玩家离开房间 |
onStart(): void server |
生命周期方法-启动模块时调用 |
onUpdate(dt : number ): void server |
生命周期方法-刷新模块调用 |
Type parameters
T | T |
---|---|
S | extends Subdata <S > |
Accessors
currentData
• | ||
---|---|---|
调用服务器方法的玩家的DataOwner Precautions 只能在服务端的rpc方法(net_开头的方法)里使用,方法执行完以后会被清除,不要在其他地方用,不要异步使用 Returns
|
currentPlayer
• | ||
---|---|---|
调用服务器方法的玩家 Precautions 只能在服务端的rpc方法(net_开头的方法)里使用,方法执行完以后会被清除,不要在其他地方用,不要异步使用 Returns
|
currentPlayerId
• |
---|
获取调用服务器方法的玩家ID Precautions 只能在服务端的rpc方法(net_开头的方法)里使用,方法执行完以后会被清除,不要在其他地方用,不要异步使用 Returns |
number |
---|
Methods
getAllClient
• getAllClient(): T
server
获取"全部客户端"调用对象
Returns
T | "全部客户端"调用对象 |
---|
getClient
• getClient(player
): T
server
根据玩家获取"单客户端"调用对象
Parameters
player number Player | 目标玩家目标玩家id |
---|
Returns
T | "单客户端"调用对象 |
---|
getPlayerData
• Protected
getPlayerData(player
): S
server
获取指定玩家的本模块数据
Parameters
player string number Player | 目标玩家目标玩家userId目标玩家instanceId |
---|
Returns
S | 数据 |
---|
onAwake
• Protected
onAwake(): void
server
生命周期方法-创建模块时调用
onDestroy
• Protected
onDestroy(): void
server
生命周期方法-销毁模块调用
onExecute
• Protected
onExecute(type
, ...params
): void
server
外部调用本模块的某个操作
Parameters
type number | 操作类型 range: type: |
---|---|
...params any [] | 操作参数 |
onPlayerEnterGame
• Protected
onPlayerEnterGame(player
): void
server
生命周期方法-玩家进入游戏(客户端已就绪,数据就绪,前后端可正常通信)
Parameters
player Player | 玩家 |
---|
onPlayerJoined
• Protected
onPlayerJoined(player
): void
server
生命周期方法-玩家进入房间(玩家刚刚连进服务器,数据和前后端通信都还没有就绪)
Parameters
player Player | 玩家 |
---|
onPlayerLeft
• Protected
onPlayerLeft(player
): void
server
生命周期方法-玩家离开房间
Parameters
player Player | 玩家 |
---|
onStart
• Protected
onStart(): void
server
生命周期方法-启动模块时调用
onUpdate
• Protected
onUpdate(dt
): void
server
生命周期方法-刷新模块调用
Parameters
dt number | 两帧之间的时间差(单位:秒) range: type:浮点数 |
---|