Merge pull request #18 from lovelyXiaoQi/main

优化 代码进阶优化教程 内的部分内容
This commit is contained in:
MCNeteaseDevs
2025-09-16 16:37:39 +08:00
committed by GitHub

View File

@@ -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_create_flying", 0)
ClientComp.CreateQueryVariable(levelId).Register("query.mod.ysm_is_elytra_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): class PlayerActionClientSystem(ClientSystem):
def __init__(self, namespace, systemName): def __init__(self, namespace, systemName):
ClientSystem.__init__(self, namespace, systemName) ClientSystem.__init__(self, namespace, systemName)
# 注册本地玩家的属性值变化回调函数 # 注册本地玩家的属性值变化回调函数
modAttr = ClientComp.CreateModAttr(playerId) for attr, query in queryDict.items():
modAttr.RegisterUpdateFunc("playerIsCreateFlying", self.PlayerCreateFlyStateChanged) ClientComp.CreateModAttr(playerId).RegisterUpdateFunc(attr, CreateAttrCallBack(query))
modAttr.RegisterUpdateFunc("playerIsElytraFlying", self.PlayerElytraFlyStateChanged)
def OnAddPlayerAOIClient(self, args): def OnAddPlayerAOIClient(self, args):
"""玩家加入游戏或进入视野时触发,注册属性值变化回调""" """玩家加入游戏或进入视野时触发,注册属性值变化回调"""
pId = args["playerId"] pId = args["playerId"]
modAttr = ClientComp.CreateModAttr(pId) for attr, query in queryDict.items():
modAttr.RegisterUpdateFunc("playerIsCreateFlying", self.PlayerCreateFlyStateChanged) ClientComp.CreateModAttr(pId).RegisterUpdateFunc(attr, CreateAttrCallBack(query))
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)
``` ```
### 工作流程说明 ### 工作流程说明