众所周知,由于 1.4.5 本身的 bug,在作品封包后游玩,星币的收集数据会发生错乱。为了解决这个问题,我特地重新写了个星币收集系统,并在这里分享,造福大家。
如果想使用这个脚本,除了加入必要的脚本和事件外,你需要给你的关卡设定上自定义HUD(如果你仍然想使用游戏默认的HUD,可以直接用示例关卡里的仿默认HUD)。除此之外,每关都需要增加三个变量,变量名称分别为“LevelID”“StarCoin”“StarCoinTemp”;在世界地图编辑界面还需加入四个全局变量,变量名称分别为“CP”“StarCoinData”“StarCoinTemp”“StarCoinCount”。下面我会解释下各个变量的作用。
局部变量:
- LevelID:关卡的编号,从 1 开始。每关的编号不能相同,因为关卡编号是用来给星币的收集情况排序的。
- StarCoin:关卡内星币的收集情况,只有在通关后这个值才会变化。范围为0 ~ 7,分别代表8种不同的星币收集情况。当关卡中的第一颗星币被收集到时,该变量值+1;第二颗收集到时,该变量值+2;第三颗收集到时,该变量值+4。(0:✩✩✩ 1:★✩✩ 2:✩★✩ 3:★★✩ 4:✩✩★ 5:★✩★ 6:✩★★ 7:★★★)
- StarCoinTemp:关卡内星币的收集情况,在游玩关卡时会实时变化,如果玩家中途死亡或退出关卡,在没有接触过检查点的情况下这个变量会重置。在通关后这个值会发送到局部变量中的 StarCoin 变量中。
全局变量/字符串:
- CP:用于检测关卡的检查点情况。
- StarCoinData:字符串,用于记录每关的星币的收集情况。字符串内容默认为 50 个 0,即最多支持记录50个关卡的星币的收集情况。若想增加最多支持记录的关卡的上限,则在名为“StarCoinData”的脚本中对该字符串的内容后面添加相应数量的 0 即可。
- StarCoinData:字符串,用于记录每关的星币的收集情况,但只在关卡尚未通关时记录,在通过后数据会清除。字符串内容默认为 50 个 0,即最多支持记录50个关卡的星币的收集情况。若想增加最多支持记录的关卡的上限,则在名为“StarCoinData”的脚本中对该字符串的内容后面添加相应数量的 0 即可。
- StarCoinCount:已收集的星币总数。
另外,你需要给每个关卡的检查点 NPC 设置上名为“Check Point”的接触事件,并在名为“StarCoinData”的脚本中根据玩家的坐标来判定玩家是否在检查点开始游戏。同时,还需要给过关点 NPC 设置上名为“Pass Level”的接触事件。(如果是通过击败 Boss 获得的问号球/水晶球等方式通关,则需要配合上 NPC - Death 自动执行事件来处理。至于通过钥匙插锁的通关方式,有一种可能比较复杂的判定方式,即一开始用别的 BGO 来代替锁孔,再使用迭代器判定拿在玩家手中的钥匙是否接触到该 BGO,若接触,则执行“Pass Level”事件并将该 BGO 的 ID 改为 35 来让玩家可以正常插锁通关。感谢 @Slash-18 提供的插锁通关的判定思路!)
如果对这个脚本的使用方式还有什么不理解的地方,欢迎在本帖询问!
Credit:
New Star Coin System Script made by HengShao.
Special Thanks to Victor ManuelMR for Default SMBX HUD script.
Special Thanks to Erwill for providing the method of handling data of Star Coins.