在无双引擎中,界面被定义为一个Python类(class),这个class中有两个函数,分别是 初始化() 和 处理消息().
其中 初始化() 用来定义界面元素, 处理消息() 用于处理用户输入消息(如按下某个按钮). 处理消息() 这个函数
不是必须的,当不提供该函数时, 加载界面() 会直接将用户输入返回给无双引擎处理. 但如果定义了 处理消息() ,
则 处理消息() 必须返回一个非空值给引擎, 否则引擎会在当前界面无限循环. 下面通过 <双生> 的开始菜单详细
讲解界面的用法.
# 定义游戏一开始时的界面. class是Python关键字,用来定义一个类
class 开始界面:
# 定义开始界面中的元素布局, def 是Python关键字,用来定义一个函数
def 初始化(self):
图片(0, 0, "标题图.jpg") #显示一张图片
图片(574, 176, "标题LOGO.png", 锚点="中中") # 显示另一张图片
按钮(616,320, 图片="START-1.png", 激活="START-点选.png", 悬浮音效="悬浮音效.mp3", 点击音效="点击音效.mp3", 返回值="开始游戏") #按钮的返回值将在 处理消息(消息) 中处理
按钮(616,380, 图片="LOAD-1.png", 激活="LOAD-点选.png", 返回值="读取进度")
按钮(616,440, 图片="SPECIAL-1.png", 激活="SPECIAL-点选.png", 返回值="特殊")
按钮(616,500, 图片="EXIT-1.png", 激活="EXIT-点选.png", 返回值="退出")
# "消息" 即为所点击按钮的返回值
def 处理消息(self, 消息):
if 消息 == "开始游戏":
跳到标签("游戏开始") # 通过 跳到标签() 这个API直接退出当前界面并跳到标签处
if 消息 == "读取进度":
加载界面(读档界面) # 点下LOAD按钮时, 加载 读档界面
elif 消息 == "特殊":
加载界面(特殊界面) # 点下SPECIAL按钮时, 加载 特殊界面
elif 消息 == "退出":
加载界面(退出游戏界面) # 点下EXIT按钮时,加载 退出游戏界面
# 定义读取存档界面,该界面不处理消息,只是在点击"返回"按钮后返回上级菜单(即调用它的菜单), 它的按钮甚至不需要返回值
# 注意:如果这个界面中没有按钮,那么加载这个界面就会进入无限循环状态
class 读档界面:
def 初始化(self):
文本(400, 150, "读档界面建设中...\n存档请使用CTRL+1至9\n读档请使用1至9数字键", 颜色=(255,255,255), 锚点="中中")
按钮(400, 300, 文本="返回", 锚点 = "中中", 宽 = 100)
# 定义一个特殊界面,本质和读取存档界面干的事情完全一致
class 特殊界面:
def 初始化(self):
文本(400, 150, "暂时还没有什么Special的...", 颜色=(0,255,0), 锚点="中中")
按钮(400, 300, 文本="返回...", 锚点 = "中中", 宽 = 100)
# 定义退出游戏界面, 这个界面中需要处理消息.点下 "是" 按钮后通过API 退出游戏() 直接退出游戏
# 点击 "否" 按钮后需要返回上级菜单, 所以返回一个非空值 ("否"就是一个非空值).对这个情况而言返回任何非空值都可以
class 退出游戏界面:
def 初始化(self):
文本(400, 150, "确定要退出吗?", 颜色=(255,0,0), 锚点="中中")
按钮(390, 200, 文本="是", 锚点="右中", 宽=100, 返回值="是")
按钮(410, 200, 文本="否", 锚点="左中", 宽=100, 返回值="否")
def 处理消息(self, 消息):
if 消息 == "是":
退出游戏()
elif 消息 == "否":
return "否"
# 定义游戏中的分支选择界面, 可以看出, 利用图片按钮可以达到多变地分支菜单效果
class 分支选择界面:
def 初始化(self):
按钮(274, 600, 锚点="中下", 图片="选项-蓝-未点选.png", 激活="选项-蓝-点选后.png", 返回值="现实")
按钮(544, 0, 锚点="中上", 图片="选项-红-未点选.png", 激活="选项-红-点选后.png", 返回值="思念")
无双引擎目前提供3中界面元素,即按钮,图片和文本.其中以按钮最为重要,图片只是起到装饰作用(美术:这个也很重要!!),
而文本不是经常使用.下面详细介绍各个界面元素.
<无双简介>中提到,按钮一共有4种表现形式.但其实我们可以将其归为两类,即可见按钮和不可见按钮.可见按钮中最常用且
效果最好的是图片按钮,而不可见按钮主要用于”调查”这种游戏模式当中.
按钮(400, 300, 锚点="中中", 图片="START-1.png", 激活="START-点选.png", 返回值="开始游戏")创建一个按钮所必须的参数即为按钮的xy坐标值(最开始的两个参数),它们配合 锚点 可以确定按钮的位置,具体请参考锚点定位系统.
按钮(400, 400, 锚点='中中', 文本="按钮文本", 图片="按钮1.png", 字体=("华文琥珀",20), 字体色=(0,0,0), 返回值="图文按钮")
参数: 按钮(750, 100, 文本="纯文本按钮", 锚点 = "右中", 宽 = 150, 高 = 30, 返回值 = "文本按钮", 字体=("华文琥珀",20))
参数: 按钮(80, 380, 锚点 = "中下", 宽 = 17, 高 = 45, 返回值 = "小门")参数:
悬浮音效(hoverSound) : 鼠标滑过按钮时播放的音效文件路径
点击音效(clickSound) : 鼠标点击按钮时播放的音效文件路径
图片(574, 176, "标题LOGO.png", 锚点="中中")图片的定义非常简单,锚点定位系统加上要显示的图片名称即可
文本(400, 150, "要显示的文本", 颜色=(255,255,255), 锚点="中中", 字体=("华文琥珀", 20) )
文本的定义也非常简单,锚点定位系统加上要显示的文本和文本颜色以及字体即可
英文版:
LoadUI(uiclass, , timeout = -1, *args, **kwargs)
uiclass:定义好的界面,至少应包括 初始化(self) 这个函数 timeout:界面自动退出的时间,可以用在打地鼠之类的场合.-1表示不会自动退出. *args,**kwargs:传递给 初始化(self, *args, **kwargs) ,新手可直接无视此行...
点击的按钮的返回值,或者经过 处理消息(消息) 后的返回值
调用该函数会暂停无双脚本的执行,直到用户点击一个按钮.
英文版: ClearCurrentUI()
说明:主要在 处理消息() 中调用,用以重绘当前界面.在制作类似”翻页”的功能时特别有用.具体请参考CG&音乐 鉴赏界面
英文版: JumpToLabel('label')
参数:要跳转到的标签名
返回值:无
说明:主要在界面处理中调用,用于退出当前界面及父界面(想像逆转裁判中的 “R键菜单→移动→移动目的地”)并直接跳转到标签处.
一般不在无双脚本中直接使用,因为无双脚本中有很方便的 跳到 指令.