From b3e5699e1c441b9d6017eb0a92109b4bf6da697d Mon Sep 17 00:00:00 2001 From: lovelyXiaoQi <1493623908@qq.com> Date: Sat, 13 Sep 2025 21:40:25 +0900 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=20=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E8=BF=9B=E9=98=B6=E4=BC=98=E5=8C=96=E6=95=99=E7=A8=8B=20?= =?UTF-8?q?=E5=86=85=E7=9A=84=E9=83=A8=E5=88=86=E5=86=85=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../20-玩法开发/18-性能优化/代码进阶优化.md | 34 +++++++++---------- 1 file changed, 16 insertions(+), 18 deletions(-) diff --git a/mcguide/20-玩法开发/18-性能优化/代码进阶优化.md b/mcguide/20-玩法开发/18-性能优化/代码进阶优化.md index 0140d0c..122792c 100644 --- a/mcguide/20-玩法开发/18-性能优化/代码进阶优化.md +++ b/mcguide/20-玩法开发/18-性能优化/代码进阶优化.md @@ -92,32 +92,30 @@ playerId = clientApi.GetLocalPlayerId() ClientComp.CreateQueryVariable(levelId).Register("query.mod.ysm_is_create_flying", 0) ClientComp.CreateQueryVariable(levelId).Register("query.mod.ysm_is_elytra_flying", 0) +# key为需要监听的attr名称,value为需要设置的对应Molang变量名称 +queryDict = { + "playerIsFlying": "query.mod.ysm_is_flying", + "playerIsElytraFlying": "query.mod.ysm_is_elytra_flying" +} + +# 根据queryDict自动配置监听,简化代码 +def CreateAttrCallBack(bindQuery): + def _eventFuckCallBack(args): + ClientComp.CreateQueryVariable(args["entityId"]).Set(bindQuery, args["newValue"]) + return _eventFuckCallBack + class PlayerActionClientSystem(ClientSystem): def __init__(self, namespace, systemName): ClientSystem.__init__(self, namespace, systemName) # 注册本地玩家的属性值变化回调函数 - modAttr = ClientComp.CreateModAttr(playerId) - modAttr.RegisterUpdateFunc("playerIsCreateFlying", self.PlayerCreateFlyStateChanged) - modAttr.RegisterUpdateFunc("playerIsElytraFlying", self.PlayerElytraFlyStateChanged) + for attr, query in queryDict.items(): + ClientComp.CreateModAttr(playerId).RegisterUpdateFunc(attr, CreateAttrCallBack(query)) def OnAddPlayerAOIClient(self, args): """玩家加入游戏或进入视野时触发,注册属性值变化回调""" pId = args["playerId"] - modAttr = ClientComp.CreateModAttr(pId) - modAttr.RegisterUpdateFunc("playerIsCreateFlying", self.PlayerCreateFlyStateChanged) - modAttr.RegisterUpdateFunc("playerIsElytraFlying", self.PlayerElytraFlyStateChanged) - - def PlayerCreateFlyStateChanged(self, args): - """创造飞行状态变化回调""" - molangVar = args["newValue"] # 属性变化后的值 - pId = args["entityId"] # 属性变化对应的实体Id - ClientComp.CreateQueryVariable(pId).Set("query.mod.ysm_is_create_flying", molangVar) - - def PlayerElytraFlyStateChanged(self, args): - """鞘翅飞行状态变化回调""" - molangVar = args["newValue"] # 属性变化后的值 - pId = args["entityId"] # 属性变化对应的实体Id - ClientComp.CreateQueryVariable(pId).Set("query.mod.ysm_is_elytra_flying", molangVar) + for attr, query in queryDict.items(): + ClientComp.CreateModAttr(pId).RegisterUpdateFunc(attr, CreateAttrCallBack(query)) ``` ### 工作流程说明