【gm8】关于异常卡死的求助
gamemaker吧
全部回复
仅看楼主
level 9
Acilen- 楼主
大佬们好,手上有一个塔防游戏,断断续续做了半年多,现在发现一个问题,游戏进入关卡后一段时间必定会卡死,是直接无响应而不是实例过多那种逐渐的卡死。
基本情况如下:进入战斗关卡后,会在右侧生成一个刷怪点,这个刷怪点会持续移动,有一个计时器用来清空当前的刷怪份额并刷出怪物,使用计时器控制每一波的刷怪份额。超过一段时间后,刷怪口会进入循环统一计时器刷怪的持续刷怪机制中。
已经进行过的测试:
1,取消刷挂点高速移动,依然卡死
2,取消刷新boss和计时器6中的持续刷怪机制,卡死,排除boss和父对象的问题
3,在1-1和1-10房间中分别测试,1-1新手关刷怪少,7分钟卡死,1-10保持在3分钟卡死,但换了一台高配电脑后,1-10卡死的时间却普遍来到了1分20
4,在调试模式下观察,卡死前没有出现异常实例
5,所有测试均在挂机状态下测试,没有任何战斗计算影响,所有生成的怪物都在到达左侧后销毁,房间实例稳定在三十个以下
因为是第一次遇上这种问题,自己现在也还在试图搞清楚,但害怕是引擎的什么机制或者电脑的问题自己不知道,走错方向就永远也修不好了,所以也在论坛中向各位大佬询问一下并附上源码。如果有老师愿意帮忙检查一下谬误就更感激不尽了。。
如果有老师愿意查看源码的话,这是游戏源文件的指南:
1,刷怪点在obj—出怪口—一村刷怪目录下
2,编程所使用的电脑不知道是不是分辨率不一样,在另一台测试机上运行出现了编程机器点人头位置可以响应,运行机器需要点人腿才能触发响应的问题,因此可能需要拖动窗口或者点击空白区域来操作的情况
3,进入游戏后使用wasd移动视野,在下方有三个关卡槽,分别对应1-1,1-10,1-11,点击1-10后需要使用wasd移动选卡标,按下回车选中,随便选八个才能进入战斗界面,然后三分钟后就会自动卡死
2023年05月09日 12点05分 1
level 9
Acilen- 楼主
434584212
2023年05月09日 12点05分 2
考虑到百度网盘下载可能会有点麻烦,所以这里也有一个空群,在群文件中名为“没有修改ene的版本”就是gmk源文件
2023年05月09日 12点05分
前排提示,已解决,请看后续楼层寻找可能的思路
2023年05月16日 11点05分
level 9
Acilen- 楼主
这里也有一份网盘版本
2023年05月09日 13点05分 3
通过百度网盘分享的文件:没有修改ene的… 链接:网页链接 提取码:782c 复制这段内容打开「百度网盘APP 即可获取」
2023年05月09日 13点05分
吧务
level 13
Cannot fine extension package: 39DLL
Cannot fine extension package: GM8扩展增强
Cannot fine extension package: MaizeMusic
Cannot fine extension package: Noisyfox's Writing
好像前几天刚刚在哪个帖子里吐槽过“用扩展就是在减少自己遇到问题后被解决的机会”,没想到这么快就遇到了。
2023年05月10日 02点05分 4
确实没想到这点∠( ᐛ 」∠)_,我也是第一次发gmk,用的是超强汉化版内置的几个dll,一直以为汉化版都统一整合了这些插件来着,也不知道怎么才能把这些扩展一起发出来,把gm引擎目录下的extend的扩展一起压了个包发在楼下了,不知道这样可以吗。。
2023年05月10日 09点05分
level 9
Acilen- 楼主
打了dll的压缩包,版本是玉米的超强汉化版
2023年05月10日 09点05分 5
通过百度网盘分享的文件:网页链接 链接:网页链接 提取码:5997 复制这段内容打开「百度网盘APP 即可获取」
2023年05月10日 09点05分
虽然打开了,但是游戏太大了我很难查出问题(而且说实话我连怎么玩都搞不清,而且还老报错)。不过先建议你别在注释以外的地方用中文(可能的话注释最好也别写中文),避免不必要的问题。
2023年05月10日 15点05分
@贴吧用户_5EMDC6b 嗯嗯,感谢大佬帮助!现在主要是懵逼在卡死的时机太奇怪了,还在努力寻找到底是触发了什么死循环还是说因为什么东西的堆积导致的崩溃,中文主要是在剧情模块里用了很多,剧情模块代码很糟糕,不知道和这个战斗界面崩溃会不会有什么关系
2023年05月10日 15点05分
@Acilen- 游戏里显示的文字用中文倒是没关系,主要是资源的命名啥的尽量还是英文。
2023年05月10日 15点05分
level 9
Acilen- 楼主
仔细在吧里又搜寻了一番,关键词应该是【死循环】,我在去检查一下是不是出发了什么while(1)这类问题,修复后会在贴里附上搜索tag
2023年05月10日 13点05分 6
level 9
Acilen- 楼主
新的实验,实验关卡1-11boss关,游戏进行时内存占用不断上升,在某个时间段城堡boss突然不知名原因暴毙并弹出结算(如果是正常掉血死亡会有一个闪屏,但是这里没有出现闪屏,弹出结算菜单是写在销毁事件中的)暴毙的同时,内存骤减了一半,有点奇怪,再多实验看看,顺便记录一下
2023年05月10日 14点05分 7
吧务
level 13
GM8特性之一(后续版本修正了),sprite和object可以使用相同的“名称”。在进行instance创建时,填入的object名字可能会被当成sprite,解析成index之后再创建对应index的object就会导致创建了不符合设计意图的行为,其中比较严重的情况就是创建一堆类似obj_control的核心。
已知object和sprite同名的:蓝色特效、升华、击打、talkbar、talk_gm、hh_dead、爆炸、新一波攻势、文字出现、防线、sr_dead
已知path和sprite同名的:开始驱灵
至于名字不要用中文、不要用减号、不要以数字开头,触雷的情况就更多了。
debug模式没看到异常instance,但也有可能是异常instance产生后立刻卡死没有给instance清单刷新留下空隙。
2023年05月11日 08点05分 8
非常感谢糖豆姐! 之前命名的时候想着要规范一点来着,结果还是疏忽了,以为不在代码中调用就可以偷偷懒。 当做反面教材了,大家千万千万要严格规范命名,尤其是制作过程很长的时候,每个细节都要为未来的制作打好基础😣
2023年05月11日 08点05分
@Acilen- 不过还是有个疑问。。因为卡死那个时间似乎没有什么特别的实例生成,异常instance导致的崩溃是一瞬间的还是堆积的呢,待会晚上我再把所有控制生成的物体检查一下好了
2023年05月11日 08点05分
@Acilen- 糖豆姐姐好可爱。[滑稽]
2023年05月12日 00点05分
吧务
level 13
命名规则,咱目前见过的比较推荐的是spelunky。资源名称由小写前缀+首字母大写的本名构成,如sPlayer和oPlayer。
然后是一些效果完全没必要使用不同的object来做(如飘出来的“防线攻破”、“gameover”),比如直接做一个文字着重显示的特效object,在创建后再更改对应的sprite_index。一些敌人也可以用这样的方法合并(合并到比parent object更省的程度),可以先从行动逻辑完全一样(只是往前跑),只是图片、移速、生命值不同的单位开始。
对了,之前测试的时候咱记录了一下1-10房间的持续帧数,卡死时显示帧数从4500到5400不等,而且有个奇怪的情况是画面卡死在5200但最终卡死前在game_gm(还是什么名字)的step里扫描所有instance记录并复制到剪切板的那段代码记录到了5400帧创建的新实例。不知道游戏是不是使用了什么“以手工重绘屏幕代替自带机制”的方法且没有正确恢复。
2023年05月12日 01点05分 9
重绘屏幕,似乎没有做这么高级的操作来着,都只是简单的生成和销毁。5400这个我也遇到过,感觉像卡死后回光返照了一会儿。。不过现在还是没搞清楚究竟是哪一步导致了这个卡死。。
2023年05月12日 14点05分
level 9
Acilen- 楼主
又测试了一次,在一个空白房间(room-三村-test)安放了一个新做的刷怪点,这次在战斗情况下持续运行了二十分钟也没有卡死,真是头大啊[泪]
2023年05月13日 07点05分 10
level 9
Acilen- 楼主
boss暴毙的bug已经修复,是我自己机制设置的问题,防线也写了一个删除所有ene,导致boss那里覆盖父对象之后还是会死
至于卡死,仍然没修复,今天进行了对照实验,在空白房间安放1-10刷怪点和game_gm,在两个boss的情况下仍然运行了20000步没卡死,明天再继续研究研究
2023年05月13日 14点05分 11
level 9
Acilen- 楼主
太感动了[泪][泪]最后使用最原始的穷举法,一个一个地从零开始加实例,终于在刚刚试出来了能触发卡死的实例,问题就出在kc(白色的那个卡槽实例),现在终于可以有的放矢地修复了,这三天我都不知道打了几百遍这个瓜娃子游戏了[怒]
2023年05月15日 06点05分 13
level 9
Acilen- 楼主
但是说起来,我至始至终最信任的就是这个卡槽了[阴险],居然他才是幕后黑手,搞不懂,卡槽的代码明明这么简单
2023年05月15日 06点05分 14
level 11
[滑稽]游戏快发出来玩玩
2023年05月15日 15点05分 15
[泪]还在修这个bug呢,没想通这个卡槽是怎么导致卡死的
2023年05月15日 16点05分
level 9
Acilen- 楼主
bug已修复,吐血了,整整五天,重启了几百次,简直是修过的最折磨的一个bug,没想到居然是这么简单的一个问题
在卡槽绘制的事件中,使用了以精灵为字符的绘制方式(代码font_add_sprite),这段代码写在了绘制事件中,本来影响不会特别大,但问题在于有八个卡槽,而且单局游戏时间特别长,就导致了不断的重复进行设置,到了一定时间堆积了十万多次的绘制,最终导致游戏卡死,最后聊聊修复这种没头脑或者知识范围外的bug一些方法吧
2023年05月16日 11点05分 16
1 2 尾页