约定俗成的死循环们
gamemaker吧
全部回复
仅看楼主
level 13
一楼给度娘,前提:先水垢……呸,先水够
十五字
再说……。
你是我的十五十五字……怎么水你都不嫌多。
2014年07月31日 13点07分 1
level 13
有的时候,有些朋友运行游戏的时候不小心某个位置崩死了(没有报错)。然后就开始遥处找是不是那个位置出死循环了,有的朋友开始纳闷了。我while,for,repeat,switch那个也没用,怎么可能有死循环呢?
实际上,因为GM本身就是一个程序,因此有可能你加入的东西可能促成运行过程中某个循环变成死循环。
1.创建事件中instance_create自己
这个很容易,但是也很容易忽视,原因在此:
你的instance_create是在创建事件里面,那么我只要把这个物体往房间里一丢,并且房间执行的时候,这个物体的动作就开始触发了,这个物体创建了一个自己,这个自己因为被创建出来,所以同样的要执行自己的创建事件,所以又创建了一个自己,然后这个物体在来一次……一个精简了零whilefor死循环就诞生了。
——来跟我读绕口令:object1生object1生object1生object1……Debug管Debug管Debug管Debug……班干部管班干部,班干部管班干部……
2014年07月31日 13点07分 2
level 13
2.物理物体用path直接性的进行寻路
这也正是在物理寻路帖里面一直弄的我头疼的东西,后来我仔细合计了一下,感觉问题应该是在这里。
不论是GMS也好还是ExP也好,物理引擎的运算固然离不开循环的帮助。那么,当你用物理运算的时候,开始还正常,一旦碰撞之后就会乱套。对于动态物体的相互碰撞来讲,牵一发而动全身,两者都会发生角度和位置的变化,这个时候,路径在这段期间内会反复不断的重新计算新路径,而即便其中一个物体是静止物体,那么碰撞造成的反弹也会造成迅速的崩溃。因此,死循环就此诞生……
——o_ball跟o_wall是一对好基友,一天……o_ball去找o_wall玩
o_ball:哎呦今天天不错哦。
o_wall:是的咩。
o_ball:你应该学学我,多走走,溜达溜达。
o_wall:谢谢,不过。我没有Force没有Velocity,我不能自己动。
o_ball:哦,不管怎么说,今天看见你真愉快,好啦,我该看看你其他的兄弟去了,只是,我撞到你了,我没地方可走了,该绕道了。
o_wall:哦,亲,你真的好智能。托你的福,我也动了呢
o_ball:额,也许把,好了现在Hmm...应该向东48°的位置动了……唉,我的腿,我是教你向东动,你干嘛向西走……额好像也许往西走是对的,额向东45°那个位置被o_wall堵上了,额,等一下,向西走不是最快的道路,额……也许往东60°的位置才是首选……额……不行,路径的maxrot是50° 额……
o_wall:亲爱的你怎么了??
o_ball:额,也许出了一点小问题,额不过……额这应该不会妨碍到我的,我一定要找到最快捷的路径,额,不如向西20°的位置,额……也不够快捷……,额,哎呦,又撞到了,完了刚才的思路全乱了,额向西40°,额……又被堵上了……
o_ball最后四肢拧成了麻花……
o_wall们得到了真理:无尽的贪得无厌,走捷径,会让自己沦落到山穷水尽的地步……——小太·奥伯龙·阿基米德·M·韩非子-Diogene
2014年07月31日 13点07分 3
level 13
3.event_perform用于对应事件的自己这个动作序号
这个做法有点……额,犯二……跟第一个有些类似,这个物体一旦被触发就是到event_perform这个动作,然后就被perform到了event_perform....
——game.exe:咦,又是event_perform(.....);
game.exe使用了event_perform传送卷轴……
game.exe:唉,有一个卷轴唉,这里卷轴好多……
game.exe使用了event_perform传送卷轴……
game.exe:Wow,这里简直就是卷轴的世界啊,那天我一定要写个日志把这个地方昭示给大家……
game.exe使用了event_perform传送卷轴……
还没来得及写日志,game.exe就死在了无穷无尽的event_perform里面……然后Ctrl+Alt+Delete三个好基佬召唤出Task Manager,game.exe满血复活回城,但是因为受到无穷诅咒game.exe需要等到下次debug的时候才能继续闯荡。
2014年07月31日 13点07分 4
1