Skip to content
ModuleS<T, S>

基类 / ModuleS

ModuleS<T, S> Class

服务端模块的基类

所有的服务端模块都必须继承这个类,才能被 ModuleService 管理。

注意:继承自 ModuleS 类中的方法名。当方法名前缀为"net_XXX"的方法才能在客户端中调用。

在 Script 类中说过,继承自 Script 的类享受onStart()、onUpdate()、onDestroy() 脚本的生命周期,在此基础之上,当在onStart()函数中注册了客户端服务端以及数据模块之后

ModuleService.registerModule(YourModS, YourModC, YourData);

继承自 ModuleS 的类也封装了一套生命周期。

继承自 ModuleS 的生命周期为:

Module

使用示例:创建一个名为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

TT
Sextends Subdata

Hierarchy

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

TT
Sextends Subdata<S>

Accessors

currentData

Protected get currentData(): S

调用服务器方法的玩家的DataOwner

Precautions

只能在服务端的rpc方法(net_开头的方法)里使用,方法执行完以后会被清除,不要在其他地方用,不要异步使用

Returns

S

currentPlayer

get currentPlayer(): Player server

调用服务器方法的玩家

Precautions

只能在服务端的rpc方法(net_开头的方法)里使用,方法执行完以后会被清除,不要在其他地方用,不要异步使用

Returns

Player

currentPlayerId

get currentPlayerId(): number server

获取调用服务器方法的玩家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:浮点数