查看: 2097|回复: 2

[已经过期] 如何使游戏崩溃后不退出游戏?请版主结贴

[复制链接]
梦石
0
星屑
1021
在线时间
90 小时
注册时间
2022-12-26
回帖
79
发表于 2023-1-25 16:13:36 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有账号?注册会员

×
本帖最后由 爱羊真知己 于 2023-1-29 16:01 编辑

如何使游戏出现崩溃弹窗后不退出游戏,而是忽略出错内容继续游戏(保留弹窗)(除文件缺失和下文提到的情况外都需要有效,不过只有部分情况有效也可以)?例如在未定义的情况下执行脚本“command_356”,弹窗显示Game_Interpreter错误后忽略这个(行)脚本继续执行(不弹窗情况下,如直接执行exit可退出游戏,不被忽略)(除地图文件外文件缺失情况下照常崩溃,地图文件缺失以第一个地图替代,第一个地图缺失照常崩溃,这个要求效果没有也可以)请问这个效果能实现吗?
结贴时,请调为已过期,谢谢!
你好!
梦石
0
星屑
12824
在线时间
1010 小时
注册时间
2019-11-5
回帖
2329

极短27参与极短25参与极短24参与

发表于 2023-1-26 11:58:19 | 显示全部楼层
本帖最后由 哇哇哇啊叭叭 于 2023-1-26 07:21 编辑

  告个罪:水区实在没版可屠了,这里说下为什么实现不了吧。

  这个问题的关隘在于工作量极大。
  简单来说:需要逆编辑RM本体,找出所有弹窗报错的字段进行修改。并且不同弹窗需要对症下药,难有统一的改法。如果说,想要自己设置的弹窗能够容错,并让游戏继续运行下去,那个还比较靠谱。

  这里说下大体思路、一些具体的实现方法吧。但现成的工程肯定是拿不出来了:
[fold=1. 停止游戏的不是“弹窗”]1. 弹窗和p
  弹窗的脚本是【msgbox("这是弹窗")】,p的脚本是【p "这是p"】。这两个家伙运行完毕后,不会导致游戏退出。真正令玩家在点击“确定”后停止游戏的,另有其代码。[/fold]
[fold=2. 容错设计得把代码查个底儿掉]2. 容错
  要在程序出错后继续运行,需要事先清楚是什么导致错误、这个错误的轻重缓急。
  最容易处理的是素材类失效的错误,这个论坛就有解决办法。另外常见的错误有“递入参数错误”、“未赋值变量被调用”等等。越底层的错误越难办,这个就像残障:腿毛少了就像没素材,顶多不在乎美观,继续走路;甲沟炎、脚开裂、脚气、香港脚等等就像参数、变量等等这种,只要事先知道它有什么害处、在什么场合以什么方法可以糊弄过去,也无伤大雅;但腿断了就彻底废了,这就是底层错误,要么长条新腿出来,要么买条钛合金狗腿,从脚毛到甲沟炎都需要重新设计,不是不会写,只是忒麻烦了。[/fold]
[fold=3. 用“排列和组合”通过容错的范例估计工作量]3. 关于容错的范例
  例1:素材丢失
  1. def shang_tu
  2.   # 新建精灵
  3.   @t = Sprite.new
  4.   # 加载图片
  5.   if Dir.glob("Graphics/Titles1/迷糊的图片.png").empty?
  6.   msgbox("缺少图片!!")                                           # 若图片不存在,就弹出弹窗
  7.   @t.bitmap = Bitmap.new(32, 32)                               # 只要不写上停止游戏的代码,游戏就不会停止。但也要想到,后面会调用这个图,所以就新建一个32*32的空白图片应付大多情况。
  8.   # 但如果出现一些如用尺寸判定碰撞等空白图片解决不了的事,还需再视情况写其他代码。
  9.   else
  10.   @t.bitmap = Cache.title1("迷糊的图片")
  11.   end

  12. end
复制代码


  例2:参数错误
  会抛错且退出的写法
[pre lang="ruby"]
def shang_tu(a)
@t = Sprite.new
@t.bitmap = Cache.title1(a)
end[/pre]
  忘写参数也能容错的写法
[pre lang="ruby"]
def shang_tu(a="临时图片.png")                             # 设施一个默认变量,防止作者忘递入参数
@t = Sprite.new
msgbox("缺少参数!!") if a=="临时图片.png"
@t.bitmap = Cache.title1(a)
end[/pre]

  例3:综述
  看了上面俩例子,很容易想到【缺少素材、忘递入参数很可能同时发生】,那么就需要把上述两种写法结合着写。
  那么到底怎样才能达到楼主的要求呢?当然是【想到所有的可能,并把这些可能都写出来】。使用【排列和组合】的知识点,就能得出大致的估计:要达到楼主的要求,可能容错代码得比正经代码还得多。
  这也是为啥厂商没提供类似“缺少素材继续运行”之类功能的原因吧!?因为任何一种设计、一个质疑,甚至一段感情,都得有个度,超过这个度,就必须不能再继续讨论,否则真是没完没了了。[/fold]
[fold=4. 逆向编辑]
4. 关于逆向编辑
  这个我也不大熟,大致一般需要【脱壳】、【内存监视器】等等方法。有时候每个程序都有自己的加密方法,需要运用强大的数学功底解决它。[/fold]
  读到这儿,大概就知道为什么程序员喜欢删库跑路了吧!?程序员陪伴着代码的每个日夜,都是一把把的辛酸泪啊。
  其实不用删库,直接把工程备注给删干净了就行。


  不清楚楼主对代码知道多少,如有说错或说得不细的,随时盖楼at我吧,只要水区没新帖,我在论坛就会来。

点评

啊……好吧,我放弃。  发表于 2023-1-26 14:24
风继续吹,不忍远离。年少轻狂,眼神明亮,最好的年纪,最好的时光。希望岁月是一场春梦
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部