问一个有关特效丢失的问题?
2dfm吧
全部回复
仅看楼主
level 13
马蛇人1209
楼主
就是替群里问的,就是问一下在什么情况下一个人释放特效时不仅没有特效图,连攻击判定都没有?如果出现这种状况该怎么解决?
2025年03月15日 11点03分
1
level 7
Easy😡
是不是游戏暂停太久?我有时会有这个情况~
2025年03月16日 02点03分
2
马蛇人1209
这个看一下楼下的
2025年03月16日 02点03分
level 13
马蛇人1209
楼主
2025年03月16日 02点03分
3
level 1
风天晴天雪天_
拆了看脚本更快
2025年03月18日 04点03分
4
马蛇人1209
话说频繁暂停也会导致特效消失吗
2025年03月18日 05点03分
厉风
@马蛇人1209
特效消失是【效】脚本的bug,很多年了,特效在同一局游戏中播放的总时间超过一个值(没有确切测量过)就会导致特效丢失,下一局开始后才会重置
2025年03月18日 12点03分
厉风
@马蛇人1209
以前有人试过用空白【效】脚本取消已有特效,看看能不能将特效存在时间清零,经过实验确认不能,所以当暂停游戏或者游戏对战时间很长时,特效一定会丢失
2025年03月18日 13点03分
风天晴天雪天_
@厉风
他说的其实不是[效]的特效,应该是[物]不生成。。
2025年03月18日 13点03分
level 12
厉风
【物】脚本导致自身不能被创建只有一种可能:
那就是你用【物】发射【物】然后把脚本嵌套调用了,于是放第一个道具之后它就自动放子道具,而子道具脚本就是母道具的,于是它又放一个子道具,“无限”循环到放了1024个道具后脚本还不能结束,于是它等第一个母道具消失后又自动放下一个子道具就无限循环了。。。
-
而且这条件下除了前面母道具和最初的几个子道具有图像显示之外,后面的子道具都只创建而来不及显示【图】所以就看不见了,但是它们还在继续创建并且保持总数1024,而你无法中止这个循环。
-
那么你这个游戏中就等于是时刻都有1024个看不见的道具在画面里,当然就不允许你创建任何新的可见道具。。。。
-
在测试模式下,开启参数显示,可以看到画面上同时有多少道具,出这个bug时一般是画面上严格保持1024个道具。。。
-
如果只是脚本嵌套了那可以查出来,问题是2dfm有删除脚本导致剩余脚本异常的bug。。。
-
而经常有一种可能就是:
-
你制作游戏过程中删除了【变】【招】【动】【随】【令】【跳】【调】【循】等有跳转目标的脚本,或者你删除了它们的跳转目标招式项目里的脚本,引起了跳转错误。。。
-
而这种错误绝不是你修复了跳转目标指向就能消除的,它会产生一些在脚本层面根本看不到的运行错误,这就是我们常说的跳转出错【污染脚本】的bug。
-
被【污染】的角色文件(player)或者系统文件(kgt)就算是你把全部脚本删除重做,【污染】也不会全部清除,也就是说一个文件如果被污染了,就只能扔了重开另一个新的(新建的绝对干净)把所有脚本重新抄进去。。。不要试图修复已经污染的文件(只能在一定程度上清理干净,但实际上还是会有概率出莫名其妙的故障)。。。
-
一旦出现这种【污染】,就有可能导致【物】的故障,本来脚本都对没有循环调用,但是运行时它会循环放【隐形道具】,达到上限你就不能创建新的道具了。。。。而且这个问题一旦出现,你查脚本根本没卵用,那个player文件可以扔了。。。。
-
要避免这种问题,就只能尽可能不要反复修改一个player或者kgt文件,只要反复修改过(尤其是增减各种复杂花哨的功能或者修正脚本),那就很那保证不出现【污染】,一旦有了【污染】那就废了,这玩意会传染到整个文件其他项目去,尤其是那些无法删除的粗体字名称项目,一定能传染到它们,就没救了(你又不能把那个项目删了重新创建)。。。
-
kgt文件反复修改尤其致命,B站上我看到好几个自制游戏录视频的up主,他们录的那游戏就有【改】【控】敌人时敌人图像和位置不
正确的
故障,但其实他player脚本肯定没错,这bug是kgt被污染导致的,没救。。。
-
非要增删新功能,一定要老老实实新开个player或者kgt文件导入素材然后把原来文件的脚本老老实实都抄进去,让整个文件都是全新没污染的然后再修改。。。
-
反复抄脚本肯定得累死人,所以最好的办法就是每制作一个新功能就之前给前面测试无误的文件留个备份,以便万一制作新功能过程里污染了,还能拿着原来干净的那版重来。。。
-
我做【斗魂】过程里就这些备份文件都有10多个G。。。。不这样的话,制作那么多复杂脚本过程里不可能做到没有失误,早就做废了。。。。
最后能做出一个没有污染的【模板】靠的就是每一步都保证使用的文件绝对干净,必须如此。
-
2dfm这个【污染】bug非常致命,会凭空增加很多制作工本(写脚本时最好的习惯就是常做备份,每一个修改之后都要大量反复测试确认它完全没问题,再备份后做下一步,必须如此)。。。
-
但是这个bug利用好了也很厉害,要防止别人乱改你脚本,只要在核心跳转脚本前面加一堆不执行的脚本把整个项目填充到255脚本满了为止,然后让脚本跳转跳来跳去,谁敢删这个项目里的任何脚本,这个文件直接就改废了。。。
-
【斗魂】模块脚本都是这样的,255填满而且跳来跳去,只不过尽可能不填充没用的脚本,已经存在的脚本基本都有用(只有【厉风】签名那部分是没用的),为的是尽可能不占用属于用户的剩余脚本总数资源。。。
-
这比其他任何加密防改的技术手段都有效,因为真的没人能改你的核心脚本,改了就废。。。
2025年03月19日 06点03分
5
level 12
厉风
很多人都喜欢拿着一个kgt文件或者player文件反复改,这是不行的。
-
反复改过程里面很难不失手造成污染。。。一旦污染那这个文件就废了(因为那些运行故障都是不能从脚本层面查出来的,它们来自于一些2dfm编辑器显示不出来的脚本删除残余数据,而且随着你反复改,这些数据不仅增多还可能被挤到别的位置去于是污染其他项目甚至扩散,而在脚本层面永远是看不见的)。。。
-
一般来说为了避免污染有一些办法:
【1】写错了脚本那就在错误脚本前面加个【跳】跳过去,不要删除错误脚本。。。
【2】整个项目都错了那就放那别动了,不要让任何脚本跳转到这个项目,也不用任何指令触发这个项目就行了(彻底当它不存在),不要试图删除它。。。
【3】不要复制粘贴脚本(一旦复制粘贴的脚本里有跳转项目,那复制过程里就可能产生错误数据),尽可能用【插入】脚本(经过长期测试确定是安全的,不产生垃圾数据)
【4】经常备份,做新功能之前要对原有的文件进行全面测试,包括复制一个文件在里面添加测试招式(比如我想测试这个文件一个飞行道具脚本同时被用来创建很多道具会不会出故障,就做一个招式放很多这个道具)来测试,测试好了再做下一步(有测试招式的那个文件当然不会被正式使用,也不用来继续制作新功能,只是作为一个副本测试用)。。。
-
如果要制作一个功能复杂的2dfm游戏,就必须如此。。。
2025年03月19日 06点03分
6
马蛇人1209
放心,我们以后会注意的,顺便问一下,什么时候可以开个新帖叫我们制作宠物系统,特别是解决宠物反向攻击的bug
2025年03月19日 11点03分
厉风
@马蛇人1209
做宠物还是算了吧,需要的基础功能太多了。最起码得有变量减法判断主人和宠物的距离来实现跟随,其次还得有防止宠物走出版边的功能,其他像是宠物判断自己、主人和敌人朝向来调整自己朝向的功能都是必不可少,就是这些你都做到了,你这宠物还得做攻击招式呢。。。
2025年03月20日 13点03分
厉风
@马蛇人1209
斗魂模板里面有这些基础功能但是我也不推荐用,宠物理论上来说相当于你另外做一个人物,但它还被限制了功能(因为它只有飞行道具的功能),这就等于被掐着脖子跳舞,你还想跳的好看那就太难了,不是做不了,而是不值得。。
2025年03月20日 13点03分
厉风
@马蛇人1209
而宠物的攻击招式是个最复杂的系统,因为主人要能随时随地控制宠物活动。这就意味着主人在攻击或者受伤硬直时,可能也需要可以指挥宠物。简化版本是只有主人自由状态时可以指挥宠物,这就涉及到主人在空中和地面时指挥宠物。。。
2025年03月20日 13点03分
level 12
厉风
你要是确实对宠物功能有兴趣,我这里简单说说基本原理和最基本的准备(具体脚本我就不给了):
【1】首先宠物既然是道具,那么它的变招就有两种可能方式:
-
一是宠物这个飞行道具(物体)改变脚本,在不同招式之间跳来跳去,来表现出不同行为。
-
二是最初的宠物本体(物体)发射一个新的飞行道具作为宠物的新本体,原来那个宠物本体自动消失,新本体运行新的招式脚本来实现对原来本体的变招。。。
-
第一种方法可以从一开始就设置好宠物的攻防区域和变量,后面招式会自动继承,因为你是跳转去别的招式的。。。既然能自动继承,那么上一招式的某些遗留状态(比如移动状态)也会被继承,有时候还需要清除遗留状态,所以脚本比较麻烦。
-
第二种方法每个招式开头都得重建攻防区域,因为不能继承之前的。。。。但是也不用清除上一招式遗留的各种状态,这就很省心。。。。
-
我不推荐第二种方式(虽然这样做起来省时省力效果还好),因为有bug,发射太多次道具,就会积累1024个图块总数导致再也不能创建新的物体了。。。。虽然不是所有win系统都有这个bug,但64位系统似乎都有。。。。
-
如果必须用第一种的话,那就意味着脚本会非常复杂,至少宠物每个招式开头你都得做一大堆铺垫(比如说刷新状态)。。。
-
-
-
【2】其次,宠物的移动就是作为宠物的那个【物体】的移动,只要不是原地不动的宠物,就一定得有【跟随功能】。
-
怎么才能让宠物跟随主人移动?
一般来说,首先得能让宠物判断它距离主人有多远,在主人身前身后什么距离的位置,然后还得规定它需要移动到主人身前身后什么位置去。
-
怎么判断宠物和主人之间的距离?
其实就是判断宠物那个【物体】和主人本体的位置差。。。
-
于是我们需要随时随地获取主人和宠物的坐标进行减法运算,那就得用两个变量分别采集主人的坐标值和宠物的坐标值,然后两个变量相减。。。。
-
但是我们知道2dfm不具备变量减变量的功能,变量之间只允许相加。。。。
-
所以我们必须曲线救国,自己写一个【给变量值取相反数】的模块来调用,一般来说我们对减数变量用这个模块取相反数,然后让它与被减数变量相加,就成功计算了主人宠物两者坐标差。。。。
-
然后根据这个坐标差、以及主人和宠物的面对方向,来分情况写脚本判断宠物是在主人身前还是身后(并把结论以给某个变量赋值的方式寄存下来)。。。
-
然后我们再检查宠物在主人身前还是身后的结论(那个变量的具体数值)分情况去设定目标位置。
-
比如我们希望宠物与主人站位相同,也就是宠物移动的目标坐标就是主人身前10像素处。。。
-
那么目标坐标就是主人当前坐标加10或者减10(依主人面对方向而定)。。。
-
然后用宠物当前坐标(变量值)减去 目标坐标(变量值)。。。其实就是先给 目标坐标(变量值)取相反数然后与宠物坐标相加。。。
-
得到距离差值之后,判断宠物需要以何种速度向什么方向移动(距离远的时候就移动速度高一些,地球人都懂)。。。。然后跳转去对应的宠物移动招式(在其开头设定前面选定的移动速度和方向,原则上来说你就需要一个【依变量数值设定速度】的模块,《斗魂》模板里面有,但是你自己做的人物文件肯定没有,你就得自己写)。。。。
-
如果不想写那个复杂的【依变量数值设定速度】模块,那就只能设定好几种移动速度,然后通过分情况跳转(比如你之前判断宠物该向什么方向以快速还是慢速移动的结果,应该以一个变量值的形式存给一个变量,然后在宠物移动招式开头检测这个变量的值跳转去不同的移动速度设置【移】脚本)。。。
-
而每次宠物移动招式结束时需要再次检测它和主人的位置关系进行下一轮跟随移动。。。。所以你就会知道,宠物每次移动结束都要调用一个预先写好的招式模块【检测与主人的距离差然后设定跟随移动方向和速度】。。。。
-
这玩意不用你实际做出来,只要想象一下就比一般的飞行道具复杂太多了。。。。
-
到此为止你的宠物刚刚具备跟随移动的基本能力。
-
在制作其他功能之前,你还得问问自己:
-
宠物跑到版边之外怎么办?
-
于是问题就来了:如果宠物出了版边就会消失,那么我们还得随时随地防止它出版边。。。。
-
这就有至少两种可选方案:
-
一是宠物移动招式开始时,我们就得计算宠物当前位置和版边的距离差,然后跳转到预先设计好的不会走出版边的移动模式去(有好多个不同移动速度或时间的模式,保证移动不同距离,其中有一种能满足需求不会走出版边但能最靠近猪人身边目标位)。。。
-
而是在宠物开始移动后,把移动动画分解成多个【图】(每个【图】持续时间很短),每个【图】前面调用一个预先写好的脚本模块【碰墙时停止移动】(《斗魂》里有现成的,但你自己的人物文件肯定没有,必须自己写)。。。。
-
上面这两种方案其实都挺麻烦。。。就算你都写好了,你这个宠物也刚刚只是能做到自动跟随主人而且不会跑出版边。。。。
2025年03月20日 14点03分
7
风天晴天雪天_
1024这个限制应该是不存在的,出现了问题应该是前面的物没有正常消失导致的,我写过个测试,每帧生成10个带图的物,每个物持续1帧完,按说一秒就生成了1k次物,跑了几分钟还在正常生成,64位w7
2025年03月21日 14点03分
厉风
@风天晴天雪天_
2dfm有显示帧数的调试模式,该模式下就能显示游戏中当前一共存在多少个图块,不能超过1024
2025年03月22日 14点03分
厉风
@风天晴天雪天_
只不过这个调试模式在XP sp3之后就不好使了(打开它就会自动关闭测试)
2025年03月22日 14点03分
风天晴天雪天_
@厉风
这个同时存在的上限应该是,只是一直生成然后正常消失就不会占用这个位置。。那个调试也时灵时不灵,偶尔能勾上打开,不过大部分时候都是勾上就报错了
2025年03月22日 14点03分
level 12
厉风
而上面我说的这些只是原理,实际制作时首先一个问题就能难倒一片人:
-
怎么判断主人和宠物朝向?
-
主人朝向一般我们用主人本体加挂一个屏幕外的物体来测量。
-
比如你给主人面前1300距离处放一个【与源同在】的物体,这个物体每过5帧检测一下自己的坐标是小于0还是大于1280,然后就知道主人面对哪一方向了,不需要这个物体输出坐标值,只要输出主人朝向状态给一个变量(比如0是面向左,1是面向右)。。。这很简单。
-
宠物则不同,先知道主人朝向后,然后给宠物设定初始朝向一直是主人的初始朝向,这个变量值就不能改了,一直要留着用。
-
为什么呢?
-
因为在游戏里,就算主人转身,之前发射的宠物【物体】也不会转身,宠物永远会维持它最初被创建时主人的朝向。。。。。
-
所以我们发现,你要宠物在主人转向后跟着转向,也就是说宠物移动招式还得有个转向与否的判断,这个判断要根据主任当前朝向和宠物朝向是否一致来做出。。。如果不一致,那就要给宠物转向(只是图像转向了,物体本身还是原始的朝向不会改变)。。。。
-
那么我们之前计算宠物应该移动到主人身边什么目标位置时,其实也需要参考当时主人的朝向,比如我们想要让宠物一直在主人身前,那么主人朝向就会有决定性影响。。。。
-
所以实际我们在写前面【设定目标位置坐标】的脚本时,是需要考虑当时主人的朝向的,没有前面我说的那么简单。。。。
-
当然这些都不难,真正难点在于写脚本时,我们很容易搞不清楚哪一个阶段的判断时,宠物该向左还是向右移动。。。。或者说很容易搞错。。。这就需要测试修正了。。。。
-
-
-
接下来的一个问题就是:
-
宠物改变面对方向时,图像左右反向,而攻防区域也要左右反向。。。
-
但是!!!!!!!!!!!
-
绝对不可以用2dfm【图】里面水平翻转那个选项来实现上述目标!
-
因为有bug,在64位系统下,图片左右反向没错,但是攻防区域可能不会正确反转!!!
-
所以真正保险的做法是,给宠物制作面朝左右两个方向的两套图像,在宠物转向时跳转到对应那套图像的移动招式去,攻防区也按照对应的图像的面对方向来设置,绝对不要使用【左右翻转】。。。
-
由此可见,宠物必须带有左右两套图像,这个制作成本省不掉。。。
-
所以我们说,制作宠物真的太复杂了,到此为止,我们的宠物才刚刚能实现自动转向跟随主人移动。。。。其他还什么都不会做。
2025年03月20日 14点03分
8
马蛇人1209
我觉得我还是看先锋公主的脚本比较好
2025年03月20日 15点03分
ULTRASTARMAN
朝向判断的原理很容易理理解。我现在在做多段跳,碰到的问题是人物发动第二次跳跃(即空中再度跳跃)时,如果发生了相对位置改变(也就是对手和自己相对屏幕的左右位置发生互换),此时按后跳会变成向前跳,按前跳会变成向后跳
2025年11月13日 08点11分
ULTRASTARMAN
比如,开场双方都在地面上(本方角色在屏幕左侧),按前跳后,角色向前(屏幕向右方向)跳跃并跃过对方头顶,此时角色在屏幕右侧且处于跳跃状态(在空中),对手在屏幕左侧。而当我在空中再发动一次向前跳跃时,角色会变成向后跳,也就是又跳回了屏幕左侧。请问如何使角色继续向前跳?
2025年11月13日 08点11分
厉风
@ULTRASTARMAN
【如果发生了相对位置改变,此时按后跳会变成向前跳】正常的游戏规则就该如此。格斗游戏中不要说二段跳,你拉防御时敌人跳过你头顶你都会解防,因为此时你虽然没转向但是你的前方向已经改变了。
2025年11月15日 11点11分
level 12
厉风
【3】宠物根据主人指挥发动攻击
-
攻击招式很容易做(但也应该避免出版边,具体怎么解决,参考前面移动技能,反正该麻烦还是要麻烦)。。。
-
但如何让宠物响应主人的指令呢?
-
宠物是个【物体】它是不能响应【令】脚本的,唯一能改变它行为的只能是【变】。
-
也就是说,主人使出一个指挥宠物的招式(比如站着伸手向前指)时,改变一个变量的值,宠物检测这个变量的值来跳转到对应的招式。。。。
-
这里就不得不说,【物体】是不能使用【任务变量】的,所以实际上【宠物】需要计算坐标差的时候使用的【取相反数】模块必须完全是【角色变量】组成的,而为了让主人做减法的功能不占用角色变量,我们一般还要用【任务变量】再写一套【取相反数】模块给主人本体用。。。。
-
宠物的一切变量操作都只能用【角色变量】,也只能通过【角色变量】和主人交换或者共享数据。。。
-
也就是说主人朝向的变量应该是角色变量,这样一来宠物才能调用。
-
那么指挥宠物做出什么动作的那个变量也必须是【角色变量】,甚至计算宠物和主人坐标差的【取相反数】模块的全部中间变量也必须是【角色变量】。。。。
-
这样一来,只要宠物结束当前招式 ,进入【决定下一步行动】的招式时,它就开始检查【主人指令变量】的数值了,然后决定自己要做出什么反应(比如该变量是0的时候,宠物自动跟随主人移动,非零时做出对应攻击动作)。。。
-
前面我们说宠物每次移动结束要计算下一轮移动的速度,这个过程就应该在【决定下一步行动】这个招式里完成,而且必须在【检测主人指令】确认指令变量是0(也就是没有任何指令)时才进行(也就是主人没给指令时才会自动跟随移动)。。。
-
基于上面的思路,当主人处于自由状态时,可以使出【指挥宠物】的招式,就能指挥宠物移动(无指令时宠物自动跟随,有指令时使用指定攻击招式,攻击招式移动时也要考虑是否出版边)。。。。
-
这个时候我们就要考虑令一些问题:
-
宠物与主人朝向不同时,攻击招式面对方向可能与主人指定的攻击方向不同。。。。
-
所以攻击招式开头也得判断主人朝向然后让宠物先【转向】(只是图像转向,宠物本身【物体】不可能真的转向),然后攻击,所以宠物的攻击招式也有面对左右的两套图像。。。。。
-
这样一来,宠物可以攻击敌人了,但还不能被敌人攻击。。。。而且只有在主人处于自由状态时才能指挥宠物攻击。。。
2025年03月20日 14点03分
9
风天晴天雪天_
我这边 物 能响应 令,也能响应按住上下左右,以前测出来就想问的,但那时风大消失好久了,就没发帖
2025年03月21日 14点03分
风天晴天雪天_
任务变量是能用的,虽然叫event变量其实更像是object变量,每个物和本体都自带一套互不影响,减法模块和其他一些模块用任务变量写,每个物和本体都能同时调用,只是交换数据需要运算完重新赋值给角色或者系统变量,之前发了个帖子讨论这个也是没人
2025年03月21日 14点03分
厉风
@风天晴天雪天_
XP系统时代物体就不响应【令】也不能用任务变量。。。否则斗魂模板不会单独做一套角色变量特有的各种模块。。。
2025年03月22日 14点03分
厉风
@风天晴天雪天_
如果64位系统下物体能用任务变量那确实是会省很多事,我没试验,但我觉得不能,因为2dfm运行时你开内存管理器会发现所有变量都有单独寄存地址,也就是它不可能凭空再给你创造出一套变量用。。。
2025年03月22日 14点03分
level 12
厉风
既然你提到先锋公主,先锋公主那个自动跟随我研究过。。。
我没记错的话,它其实就是一开始先做个人物模板,人物模板自带一套(可选的那几个)宠物,每个宠物都有两套行走和攻击动画(一套面向左一套面向右,就和我前面说的一样)。。。
然后拿着模板做每一个人物,于是做出来的人物就都自带一套宠物。。。。
它那个宠物的跟随位置不是精确的,宠物只能固定走到几个固定的横坐标去,宠物只是靠判定主人当前具体位置靠近这几个坐标里的哪一个,然后走到对应那个靠主人最近的坐标去。
这只是个障眼法而已,因为主人移动速度都不快,所以不容易穿帮,东东不死传说里各种冲技都很快而且是长距离的,用先锋公主的宠物跟随马上就得穿帮。。。。
除此之外其他制作(比如宠物改变面对方向)都是按我前面说的原理做的,因为不可能还有别的方法。。。。
2025年03月22日 14点03分
10
1