Project1

标题: 求教下,经常在游戏里第二、三次进入战斗的时候报错 [打印本页]

作者: 踢腿水上飘    时间: 2016-11-1 14:22
标题: 求教下,经常在游戏里第二、三次进入战斗的时候报错
一进战斗就一卡一卡的几下,然后就RGSS3停止工作……这是怎么回事啊
作者: Vortur    时间: 2016-11-9 11:10
本帖最后由 Vortur 于 2016-11-10 02:11 编辑

  

  六楼的坏人已经给出正确答案,此楼对bug的猜测错误。啧...{:2_251:} 在下这次抛了砖引玉,希望下次有良才美玉主动出手。

  不定期贴一下在下的发现和猜测,看看能解决到什么程度吧...
[fold= RTAB-CP战斗  使用的类]
class Scene_Battle < Scene_Base

class Window_ActorCommand < Window_Command

class Game_Battler < Game_BattlerBase

class Game_Troop < Game_Unit

class Spriteset_Battle

class Sprite_SightShadow < Sprite

class Spriteset_Map




  [/fold][fold=视野限制 中的类]
class RPG::BaseItem

class Game_Actor

class Sprite_SightShadow < Sprite

class Spriteset_Map



  [/fold][fold=Sideview中的类-未完成]
class SideView

class Sprite_Weapon < Sprite_Base

class Sprite_Battle_Picture < Sprite

class Sprite_Back_Picture < Plane

class Sprite_Damage < Sprite

class Window_Skill_name < Window_Base

class Spriteset_Sideview

class Sprite_Battle_Back < Plane

class Battle_Camera

class Scene_Battle < Scene_Base

class Game_Battler < Game_BattlerBase

class Game_Actor < Game_Battler

class Game_Enemy < Game_Battler

class Sprite_Base < Sprite

class Sprite_Battler < Sprite_Base

class Spriteset_Battle

class Window_BattleLog < Window_Selectable

class Game_Interpreter






  [/fold]



[fold=16.11.10.15.31]

  但是不使用【数据库战斗测试】,即时【main下有脚本】,也不会出现游戏卡死的情况。故下述实验中,只能表明【main下脚本】与【数据库中战斗测试】冲突,并且楼主提出的bug是一种【非必发性的bug】。ORZ...

  不过有一个发现性的发现是:【人物成长曲线与怪物成长曲线搭配不太合适】。人物Lv1的时候,史莱姆几乎无法对玩家造成有效杀伤。但是在人物Lv30的时候,史莱姆约3轮就可将场上玩家杀死。

[line]0[/line]测试情况如下:

1.  楼主工程中,使用【数据库】的【战斗测试】,在【战斗结束,显示情报画面】处卡死。
2.  单独在新建工程中使用Sideview  与  RTAB-CP战斗,使用【数据库】的【战斗测试】,则不会有此效果。
3.  在楼主工程中,删除所有【main之后的脚本】,使用【数据库】的【战斗测试】,也不会有此效果。
故:Sideview  与  RTAB-CP  不冲突;估计卡死原因系【在main之下插入脚本】所致。
bug示意图:
(, 下载次数: 0)
理论来自【控制变量法、中值定理】








[/fold][fold=16.11.9.18.59]
  目测是Sideview跟RTAB-CP的冲突,跟视野限制可能没有关系。两者至少都使用了【 Scene_Battle 】这同一个类;重复在插件里定义同一个类应该会导致错误。不清楚“使用插件类覆盖预设类”是怎样做到不出bug的。
  不过sideview还没有找完,尚不明冲突的类都有哪些。而且,也没有使用控制变量法来测试“RTAB-CP战斗,Sideview,视野限制”三者到底是“ab、bc还是ac,亦或是abc”四种情况中的哪一种。今天太晚了,明天使用控制变量法来排错吧!



[/fold]


[line]3[/line]To 坏人 :
@ RaidenInfinity   

1.  随便你们怎么随时修改版规,反正在下不在乎{:2_272:}
2.  误导是【有意识的】提供错误答案。但本人即使给自己排错,也使用的是同样的方法,所以绝对不是有意识的。而且,你见过哪个坏蛋写这么多认真的话来误导人的?
3.  有时间看在下的答案,怎么不回个贴拨乱反正?{:2_251:}
4.  在下专门照顾那些没人回答的帖子,不给小红花也就罢liao,还处处挤兑在下,太过分啦~~{:2_253:}叫你们的掌柜的来!~
[line]3[/line][fold=16.11.9before]有无更详细的描述...?

  比如插入了何种插件、效果截图等等。还是说【新建一个工程,什么都不改,就会出现这样的错误】啊?[/fold]
作者: fux2    时间: 2016-11-9 13:09
停止工作我感觉就是Sprite泄露了,你使用过哪些脚本贴一下吧。
作者: 踢腿水上飘    时间: 2016-11-9 17:52
工程在这里http://pan.baidu.com/s/1boAY7BD,我检查了一下,是RTAB-CP战斗,Sideview,和视野限制这三个脚本的问题,但我不会修……求帮个忙- -
我把这三个脚本去掉就没问题了,但是这三个脚本对我还是比较重要的,毕竟纵版战斗不好看……能帮忙的话十分感谢~!
作者: 踢腿水上飘    时间: 2016-11-9 20:05
这个跳出不定时出现,有时候2,3次战斗就出来了,有时候一直玩都不出现
作者: RaidenInfinity    时间: 2016-11-10 19:18
你的脚本的问题是精灵dispose的顺序不正确。精灵(Sprite)在它属于的显示端口(Viewport)之后释放(dispose)的话,有几率造成内存读取错误,而程序崩溃。这是VA程序本身的BUG,至今未修也不会再被修正。因此,能做的只有尽量避免忘记释放精灵,和避免在精灵释放之前释放显示端口。

第一个脚本:视野限制
将153和154行反过来放。
[pre lang="ruby"]  alias tmblsight_spriteset_map_dispose dispose
  def dispose
    dispose_sight_shadow
    tmblsight_spriteset_map_dispose
  end[/pre]

第二个脚本:Sideview
将4821和4822行反过来放。
[pre lang="ruby"]  alias dispose_spriteset_battle_n03 dispose
  def dispose
    @effect_sprites.dispose
    dispose_spriteset_battle_n03
  end[/pre]

第三个脚本: RTAB-CP 战斗
这个脚本的dispose方法有严重缺陷,因为并未使用alias而是用了覆盖的方法,而且释放次序还错误!
这导致SideView所创建的Sprite_Weapon无法被释放,而导致了程序崩溃的问题。
将这个脚本里面的dispose替换成下面这个:
[pre lang="ruby"]
    alias :rtabcp_dispose :dispose
  def dispose
    dispose_rtabcp_gauge
    rtabcp_dispose
  end
[/pre]

就是这样。




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X5.0