查看“关卡加载”的源代码
←
关卡加载
跳转至:
导航
、
搜索
因为以下原因,您没有权限编辑本页:
您所请求的操作仅限于该用户组的用户使用:
用户
您必须确认您的电子邮件地址才能编辑页面。请通过
系统设置
设置并确认您的电子邮件地址。
您可以查看与复制此页面的源代码。
{{NeedContent/zh}} {{ProfessionalArticle/zh}} '''关卡加载'''是指玩家从主[[菜单]]或[[通关]]界面点击关卡,然后加载'''新的关卡'''的过程。游戏中,关卡加载的视觉过程表现为黑色的游戏界面,最下方存在从左到右依次加载的、被分为八格的、随着加载程度增加而逐渐变亮的进度条。 本页面将介绍关卡的加载方式,由于是基于Virtools的原理简介,各标题将使用Virtools中连线图的名称。 为了方便本页面有助于自制地图检查卡进度条等情况,会额外标注一些提示用来注解当前段容易在哪写地方出错,以及会错在哪里。 == Init Arrays == # 恢复四个Array的IC:Checkpoints, PH_Groups, Reset_Points, PH == Load LevelXX == # 从CurrentLevel读取当前需要被加载的关卡,然后在名为"AllLevel"的Array中将数字减一并按Row寻找文件名,然后在3D Entities\Level\下找文件加载。 # 新建一个名为All_Level的Group,将新加载的关卡中的所有物件归到此组中,让后将此组插入到表RegisterNMO中(Load ID = 1) # 发送阶段完成信号("Part_Loaded"Message,Dest是Level,下同)(1格进度条) == load Music == # 将Musicfiles.nmo放入"Levelinit_Loading"中,再将"Levelinit_Loading"放入Loading_Param,然后执行脚本LoadingManagerScript,然后清空Levelinit_Loading # 根据GameSetting中的13列LowMemory判断,如果为真,则从Sounds_low加载音乐,否则从Sounds加载 # 构造了文件名,加载三个音乐文件并归入All_Music组(加载失败不会阻止后续操作) # 如果关卡为12/13关,创建名为Music_thunder和Music_LastFinal的音乐对象并加载,并归入All_Music组(加载失败不会阻止后续操作) # 运行脚本Music_Init == load Tutorial.nmo == # 读取GameSettings,确认是否需要Tutorial,如果不需要,跳过本节后续步骤 # 将Tutorial.nmo放入Levelinit_Loading中,再将Levelinit_Loading放入Loading_Param,然后执行脚本LoadingManagerScript,然后清空Levelinit_Loading == set CurrentLevel == # 读取AllLevel,获得该关卡对应的StartBall,实例化一个然后添加到CurrentLevel里 # 实例化一个Ball_Pos_Frame添加到CurrentLevel里 == Process Placeholder == === Set Sector Attribute === # 使用Sector_0前缀,以从1-9(包含两端数字)的循环开始寻找小节组 # 如果找到了,就遍历当前组的对象,为其添加名为Sector的Attribute,值为当前小节的编号(基于1),然后以无依赖模式删除小节组。如果没找到从当前模块跳出 PS:如果1-9的所有小节组都找到了,那么程序会卡在这里卡死 === Replace PH === # 遍历PH_Groups,对于每一行,查找其Group Names的组,然后开始遍历里面的物体 # 如果物体没有Sector的Attribute,那么程序会卡死在这,并运行TT_Debug,Debugtext是No Sector-Attrib by Object (Name)。如果有Sector,将会把此物品记录在PH表内,包括这个物体本身(3d Entity),World Matrix,归属的机关类型名(上文的Group Names)和对应的小节组 # 遍历PH表,以全部依赖模式删除物体本身(3d Entity) === Count PH === # 将PH_Groups表中的第一列Amount全部清空为0 # 获取PR_Resetpoints组中的物体个数,然后用其启动一个从1开始步长为1,以物体个数为结束值的Counter(即每一小节做一个循环) # 对于每一个循环(每一小节),从PH表中筛选Sector为当前小节号的机关并将其归属的机关类型名写入PH_Counter,然后循环PH_Groups(循环已知的机关模型列表)然后计算PH_Counter中是当前选中行类型的机关的个数并将其写入当前行的第一列Amount,完毕后最后清空PH_Counter,如此往复直到各个小节处理完毕 # 对PH第一列Sector进行升序排序 # 发送阶段完成信号(2格进度条) === load Placeholder === # 遍历PH_Groups,如果Amount大于0,那么就将其机关类型名(Group Names)加上.nmo后的字符串加入Levelinit_Loading表,准备加载 # 将Levelinit_Loading放入Loading_Param,然后执行脚本LoadingManagerScript,然后清空Levelinit_Loading # 发送阶段完成信号(3格进度条) === init and load Checkpoints === # 获取PC_Checkpoints组,选取组内的第一个元素(Group Iterator遍历第一项,而处理结束后直接链接到BB Graph Out),获取其名称并删除最后3个字符,再加上.nmo,将组装好的名字放入Levelinit_Loading中(相对路径为:3D Entities\PH\;启动init脚本为:是),再将Levelinit_Loading放入Loading_Param,然后执行脚本LoadingManagerScript,然后清空Levelinit_Loading # 将上文获取到的删除最后3个字符的名称在末尾加上_MF,获取对应的物体,将其以Custom Dependencies(复制Script, Group Belonging和Attribute但不复制其余的)复制一份 # 获取PC_Checkpoints组中元素个数,并填充相等的行数在表Checkpoints中 # 遍历PC_Checkpoints组,以_分割物体名称并取其第三位(小节序号)如果为奇数,则使用之前获取的加_MF的物体,如果为偶数,则使用之前从_MF复制来的物体。并获取当前遍历物体的World Martrix一并写入表Checkpoints中(写入行数为之前分割物体名称获取到的小节序号-1) # 遍历PC_Checkpoints组,以Full Dependencies模式删除所有物体 # 发送阶段完成信号(4格进度条) PS:如果PC_Checkpoints中没有任何元素,程序会继续运行,不会停止,但是因为Particle_Flames贴图的定义是存储在PC_TwoFlames.nmo中的,所以开头盘点火会丢失贴图,从而呈三角形。例如[[飞船也整人]]。 === init Resetpoints === # 与上一节类似,获取PR_Resetpoints组中元素个数,并填充相等的行数在表ResetPoints中 # 遍历PR_Resetpoints组,以_分割物体名称并取其第三位(小节序号)。获取当前遍历物体的World Martrix写入表ResetPoints中(写入行数为之前分割物体名称获取到的小节序号-1) # 遍历PR_Resetpoints组,以Full Dependencies模式删除所有物体 === init and load Levelstart === # 获取PS_Levelstart组,选取组内的第一个元素(Group Iterator遍历第一项,而处理结束后直接链接到BB Graph Out),获取其名称并删除最后3个字符,再加上.nmo,将组装好的名字放入Levelinit_Loading中(相对路径为:3D Entities\PH\;启动init脚本为:是),再将Levelinit_Loading放入Loading_Param,然后执行脚本LoadingManagerScript,然后清空Levelinit_Loading # 将上文获取到的删除最后3个字符的名称在末尾加上_MF,获取对应的物体,然后再获取其World Matrix,然后一并插入表PH中(其他字段数值:Sector: 01;Set: True;Type Name:PS_Levelstart) # 遍历PS_Levelstart组,以Full Dependencies模式删除所有物体 # 发送阶段完成信号(5格进度条) PS:如果PS_Levelstart中没有任何元素,程序会运行TT_Debug,Debugtext是no Element in LevelStartgroup,然后继续运行,不会停止 === init and load Levelende === === Copy Objects === === fill DepthTest Group === === set MF-Objects in Array === === init Placeholders === == set Mapping and Texture == === set Env. Mapping === === Full Version? === === Load Sky-Textures === === Set Mat Laterne === == init Level == == Preload Sound ==
该页面使用的模板:
模板:Ambox
(
查看源代码
)
模板:Ambox/core
(
查看源代码
)
模板:Attribute
(
查看源代码
)
模板:NeedContent/zh
(
查看源代码
)
模板:ProfessionalArticle/zh
(
查看源代码
)
返回至
关卡加载
。
导航菜单
个人工具
中文(中国大陆)
创建账户
登录
名字空间
页面
讨论
变种
视图
阅读
查看源代码
查看历史
更多
搜索
导航
首页
最近更改
随机页面
帮助
主分类
制图
竞速
Q&A
机关大全
相关程序
地图图鉴
相关网站
Ballance吧
Ballance QQ群
Ballance Discord群组
Speedrun.com
Ballance吧专区
导航贴
英雄榜
快捷访问
公共沙盒
贡献指南
赞助我们
工具
链入页面
相关更改
特殊页面
页面信息