旧版 UI 模块
文档内容已过时
旧版UI模块仅作向下兼容保留,推荐使用新版UI界面类(1.3.8+
)
EasyScreenNodeCls 界面
简易界面类EasyScreenNodeCls, 可继承并开发
Binding 绑定Json文件
使用装饰器绑定界面到指定Json文件画布 自动完成注册
python
# Client.py
from QuModLibs.Client import *
from QuModLibs.UI import *
# 绑定一个Json文件画布, 其中ParamDict参数默认为{ "isHud": 1 } (不遮挡屏幕操作)
@EasyScreenNodeCls.Binding("myUI.main")
class MyUICls(EasyScreenNodeCls):
def __init__(self):
print("界面已创建")
注意事项
EasyScreenNodeCls 大量采用反射,相关页面类不推荐使用静态属性/方法 可以单独定义个类存放静态数据
创建UI界面
创建类实例即可创建UI, 界面的方法同原版ScreenNode一致 (Qu开头的为特有方法)
python
# Client.py
from QuModLibs.Client import *
from QuModLibs.UI import *
@EasyScreenNodeCls.Binding("myUI.main")
class MyUICls(EasyScreenNodeCls):
def __init__(self):
print("界面已创建")
# EasyScreenNodeCls会自动判断界面是否创建,如果已经创建则会直接返回node实例
@Listen(Events.UiInitFinished)
def UiInitFinished(args={}):
MyUICls() # EasyScreenNodeCls为 <单例模式每个class只存在一份实例
获取uiNode实例
获取ui节点实例
python
# Client.py
from QuModLibs.Client import *
from QuModLibs.UI import *
@EasyScreenNodeCls.Binding("myUI.main")
class MyUICls(EasyScreenNodeCls):
def __init__(self):
print("界面已创建")
def fun():
print("执行功能")
@Listen(Events.UiInitFinished)
def UiInitFinished(args={}):
uiNode = MyUICls() # 创建界面 返回uiNode
uiNode.fun()
# EasyScreenNodeCls 提供了多种GetUI方法
# 最为简单和常用的: 使用你的界面类的类方法
uiNode = MyUICls.GetUi()
uiNode.fun()
# 亦或者直接使用 EasyScreenNodeCls 类方法
uiNode = EasyScreenNodeCls.GetUi(MyUICls)
uiNode.fun()
销毁UI节点
原版界面方法销毁UI节点
python
# Client.py
from QuModLibs.Client import *
from QuModLibs.UI import *
@EasyScreenNodeCls.Binding("myUI.main")
class MyUICls(EasyScreenNodeCls):
def __init__(self):
print("界面已创建")
self.SetRemove() # 调用方法销毁界面
@Listen(Events.UiInitFinished)
def UiInitFinished(args={}):
MyUICls()
EasyScreenNodeCls 类方法 销毁UI节点
python
# Client.py
from QuModLibs.Client import *
from QuModLibs.UI import *
@EasyScreenNodeCls.Binding("myUI.main")
class MyUICls(EasyScreenNodeCls):
def __init__(self):
print("界面已创建")
@Listen(Events.UiInitFinished)
def UiInitFinished(args={}):
MyUICls() # 创建界面
# 类方法 RemoveUi 会自动判断界面是否存在 如果不存在则会自动pass
MyUICls.RemoveUi()
EasyScreenNodeCls 注解功能
@EasyScreenNodeCls.Listen
注册UI界面的事件监听,并在UI销毁时自动结束监听
python
# Client.py
from QuModLibs.Client import *
from QuModLibs.UI import *
@EasyScreenNodeCls.Binding("myUI.main")
class MyUICls(EasyScreenNodeCls):
def __init__(self):
print("界面已创建")
self._tick = 0
# 注册监听 应使用EasyScreenNodeCls.Listen而不是QuMod客户端的Listen
@EasyScreenNodeCls.Listen(Events.OnScriptTickClient)
def OnScriptTickClient(self):
self._tick += 1
if self._tick == 60:
# 2秒后删除UI
self.SetRemove()
@Listen(Events.UiInitFinished)
def UiInitFinished(args={}):
MyUICls() # 创建界面 此时会每Tick输出文本内容 2秒后销毁界面
# PS: 基于动态语言特性 已有装饰器静态方法如 Listen 请勿再次声明相关命名的方法 否则会产生覆盖导致功能失效
@EasyScreenNodeCls.OnClick
注册按钮点击回调
python
# Client.py
from QuModLibs.Client import *
from QuModLibs.UI import *
@EasyScreenNodeCls.Binding("myUI.main")
class MyUICls(EasyScreenNodeCls):
def __init__(self):
print("界面已创建")
@EasyScreenNodeCls.OnClick("/panel1/button1")
def fun1(self): # 为 /panel1/button1 按钮添加点击回调 无参数
print("执行功能")
@Listen(Events.UiInitFinished)
def UiInitFinished(args={}):
MyUICls() # 创建界面
# PS: 基于动态语言特性 已有装饰器静态方法如 OnClick 请勿再次声明相关命名的方法 否则会产生覆盖导致功能失效
@EasyScreenNodeCls.OnTouch
注册按钮Touch回调 回调参数具体数据可查阅网易文档
python
# Client.py
from QuModLibs.Client import *
from QuModLibs.UI import *
@EasyScreenNodeCls.Binding("myUI.main")
class MyUICls(EasyScreenNodeCls):
def __init__(self):
print("界面已创建")
@EasyScreenNodeCls.OnTouch("/panel2/button2")
def fun2(self, args): # 为 /panel2/button2 按钮添加触摸回调 有详细参数
if args["TouchEvent"] == 0: # 当对按钮执行的操作为"松开"时
print("执行功能")
@Listen(Events.UiInitFinished)
def UiInitFinished(args={}):
MyUICls() # 创建界面
# PS: 基于动态语言特性 已有装饰器静态方法如 OnTouch 请勿再次声明相关命名的方法 否则会产生覆盖导致功能失效
Destroy 生命周期
UI生命周期方法,当UI销毁时自动调用
python
# Client.py
from QuModLibs.Client import *
from QuModLibs.UI import *
@EasyScreenNodeCls.Binding("myUI.main")
class MyUICls(EasyScreenNodeCls):
def __init__(self):
print("界面已创建")
def Destroy(self):
print("界面已销毁")
@Listen(Events.UiInitFinished)
def UiInitFinished(args={}):
MyUICls() # 创建界面
MyUICls.RemoveUi() # 销毁界面
UI界面自定义携参
EasyScreenNodeCls可以像常规的实例构建一样携带参数
python
# Client.py
from QuModLibs.Client import *
from QuModLibs.UI import *
@EasyScreenNodeCls.Binding("myUI.main")
class MyUICls(EasyScreenNodeCls):
def __init__(self, entityId):
self.entityId = entityId
print("界面已创建")
def Destroy(self):
print("界面已销毁")
@Listen(Events.UiInitFinished)
def UiInitFinished(args={}):
MyUICls(playerId) # 创建界面 并传递参数 playerId
UI界面绑定到生物
python
# Client.py
from QuModLibs.Client import *
from QuModLibs.UI import *
@EasyScreenNodeCls.Binding("myUI.main")
class MyUICls(EasyScreenNodeCls):
def __init__(self):
pass
# 为特定生物创建并绑定UI autoScale=True 启用自适应缩放(根据实体与摄像机的距离)
MyUICls.CreatUIBindEntity(entityId, bindOffset=(0, 0, 0), autoScale=True)
MORE
更多功能请查阅UI扩展模块