2dfm吧 关注:2,094贴子:39,611
  • 7回复贴,共1

[灌水]格斗游戏的一些基本规则(计算机层面的)

只看楼主收藏回复

1--攻击:
我们都知道存在所谓 攻击矩形 和 受伤矩形。当两者有一部分区域重合时,攻击命中。
但实际上在格斗游戏里,绝对不是这么简单就完了。格斗游戏中存在几个基本的相关问题:
比如说防御的存在,当身(格挡反抓)的存在,以及各种对空无效或对地无效属性的存在。
计算机要判断命中,它一般须按照下面的步骤进行一系列的判定:
--首先是判断敌人所处的状态是站立还是蹲还是在空中(空中就是人物纵坐标y大于0的状态,2dfm里面是小于0),那些对空无效的攻击,或者对地无效的攻击,此时都会被判定其有效性,有效时才会进入下一步判断,无效则直接判断为打空。
--然后判断被攻击方是否已经处于受伤或者防御成功的状态,这样计算机才能知道那些“不能追击”的攻击是否应该打空。不打空的话,才能进入下一步。
--第三步判断对手是否处于站蹲跳状态对应的那个防御技的预备姿态。如果人物确实处于对应预备姿态,则进入对应的防御状态(其实就是被攻击方的受伤标志为2表示防御),然后进行第四步的判断。如果人物不处于防御预备姿态,就直接进入受伤姿态(其实就是被攻击方的受伤标志为1表示受伤,不受伤时为0),跳过第四步,直接判断第五步。
[注:任何防御的发生机理如下:当人物处于该防御技的预备技能状态中,被敌人打中后就转入对应的防御成功状态。
按后防御的游戏中,站立后退和蹲着按住“后下”(有些游戏中就是蹲着后退),以及空中按“后”就是防御的预备姿态,这些姿态下的人物被敌人打中后就会自动转入对应的防御。
如果人物不处在这些状态,那么被打中后就进入敌人攻击技能设置的受伤反应。]
--第四步判断攻击方的攻击是否有“不可防御”属性,如果有,那么被攻击方的防御状态自动切换到受伤状态进行下一步判断。“不可防御”意味着被攻击方在这个攻击下不能使用出防御技,所以如果被攻击方不是处于防御预备姿态,它是一定不能使出防御技能的,则这个第四步会被跳过。
--第五步判断被攻击方受伤后转入什么状态,先判断攻击方是否要控制被攻击方后续的动作,如果是,就直接让被攻击方转入被控状态,抓招中抓住对手打就是一例。
如果不是控制,就转入下面的判断:判断受伤标志是1还是2,来判定被攻击方是该受伤还是该防御,具体的攻击和防御动作则由攻击方决定。
只要是进入了本步判断,就意味着被攻击方不是受伤就是防御成功了。即使是防御成功,但如果攻击方的攻击技规定被攻击者防御成功后也要转入受伤动作,那么防御成功的一方还是会受伤,这才是真正的“破防御”。也就是说,攻击破坏什么防御,完全是在这一步判断的。然后进入第六步。
--第六步判断被攻击方被攻击前是否已经处于当身状态或者霸体状态。有当身技能的人物只要使出当身技,就会令其一个标志变量从默认值0变为1,当身有效的时间内一直维持,过期后清0。这也就是当身标志。霸体技能发出后,当身标志是2。
如果人物受伤之前已经发出当身技或者霸体技,并且当身或者霸体状态没有结束就被攻击了,而且没有被敌人控制,只是普通的受伤,那么就会在本步骤(第六步)检测当身标志,如果标志是1,则人物不仅不会受伤,还会自动转入当身反击并开始最后一步判断。
如果标志是2,则人物也不会播放受伤动作,还是继续播放之前的动作并开始最后一步判断。
如果人物没有进入当身反击状态或霸体状态,会自动播放受伤动作或者防御成功动作,并开始最后一步判断。
---最后一步判断血量增减,如果没有进入当身反击,此时当身标志是0,则判断攻击方攻击是否磨血,并按照攻击方的攻击力以及被攻击方受伤修正率等攻防参数计算血量,从被攻击方血量中扣掉。如果当身标志是1,则扣血为0,并把标志清0。如果当身标志是2,一样扣掉生命,但是当身标志维持2直到原霸体技能剩余部分播放完毕清0。



IP属地:黑龙江1楼2011-08-05 08:45回复
    从上面可以看出,格斗游戏的规则要比其他任何类型的游戏复杂,仅仅是一次攻击命中就已经进行了诸多复杂的判断。
    上述过程亦可以使我们得到下面的基本结论:
    1--是否打空是最先判断的,不仅判断对空对地是否有效,还判断能不能追击受伤对手(防御成功也属于受伤)。商业游戏里,受伤后不能被抓,防御成功后不能被抓,当身被攻击后不能被抓,霸体被攻击后也不能被抓,都是一个道理,因为抓设置了“不能追击”,而这四个状态都属于受伤。
    对地抓招不能抓空中的敌人是因为设置了对空无效。
    2--不存在所谓“防御区域”,也就是说,格斗游戏“理论家”所说的“防御区域”被打中导致防御成功的说法是错的,那属于幻想。防御实际上也属于受伤,只不过它是认为防御预备姿态中被打伤的效果。
    3--抓招和普通攻击破防的区别就是,抓招是靠第四步判断 抓 具有“不可防御”属性,来阻止对手出现防御,也就是说,对手如果没处于防御成功状态,这个判断才有效,对手将不能使出防御技能。这才是抓招破防和普通攻击破防的关键区别所在。普通攻击不存在这个阻止对方防御的性能。普通攻击破防是在第五步判断中破的。
    [注意:但如果对手已经处于防御成功状态,此时防御成功状态不是“防御预备姿态”,所以自然不能用出防御技能,所以此时“不可防御”属性没有意义了。
    在这个属性无意义的前提下,抓招是否破防全看抓招是否允许攻击受伤的人,正常规则下不可以,所以敌人受伤或者防御成功时都不会被抓,但那是和“不可防御”没关系的。
    但如果你允许抓招追击对手受伤状态,那么它此时的破防原理和普通攻击无异。]
    4--不存在所谓三段防御,攻击要破什么防御,完全是在第五步判断的,就算你防御成功也是可以挨打的,全看攻击方攻击技能的受伤反应规定。挨打的一方完全是被动的。
    而且这个判断完全是看挨打的人处于站蹲跳什么状态,根本不管攻击区和受伤区的高度如何。
    5--抓招破坏当身或霸体的原理就在于抓中后开始控制被抓者的判断步骤比当身或者霸体优先,一旦被抓,就不再判定当身或者霸体了,就算你发出当身和霸体也照样被控。
    6--当身和霸体实际上是在受伤后出现的,所以不挨打就不出现对应效果。
    7--扣血是在所有判断结束后才进行的,此时不仅决定了扣血多少,连被攻击方的受伤动作(包括受伤、防御、当身反击、霸体)也已经被决定。
    最后要说的是:
    飞镖能破坏当身的原因就是当身反抓时抓不到目标(飞镖没有被抓的那个动作,自动被判断为抓失败),当身程序设定了抓失败后自动跳回受伤(如果你没有制作这个跳回,你做的当身就是完全不合格的),而如果发射飞镖者距离当身者很近,就能被抓到,就是这个原理。


    IP属地:黑龙江2楼2011-08-05 09:13
    回复
      2--死亡和眩晕规则:
      ---任何游戏,都不是人物血清零即死的,而是要过个0点几秒才会开始判断(商业游戏如此,2dfm和mugen也是如此),多以如果在判断之前把血加到0以上,系统就算判定出现死亡动作,也不会判断对手获胜,所以如果你把人物的血数值锁定,就算用秒杀技能打他,他死了之后你也不会胜利,有些游戏判断死亡动作(倒下)之后如果血还是大于0,人物还会爬起来,许多训练模式都是这样制作出来的,只要死亡动作和普通被打倒没什么区别,那么这个人物就可以不死。
      ---死亡是在扣血那一步骤判定的,由于判断完扣血和受伤者应该播放的动画之后,实际上受伤动画还是没开始播放,因为上述7步判断是计算机一瞬间完成的。扣血也是一瞬间完成,之后在播放受伤动作前会进行死亡或者眩晕判断,如果死亡条件或者眩晕条件成立(死亡条件优先),就会用死亡动画代替原定的受伤动画。
      当身可以被攻击不死,就是因为扣血为0,人物还是血量高于0,所以死亡条件没有成立。
      霸体会被打死,就是因为死亡条件成立,而且优先替换霸体的剩余动作,所以霸体会被死亡取代。
      当身和霸体不会眩晕,只是因为眩晕条件中要求当身标志是0,如果你把商业游戏的这个标志改成1,那么当身成功也会晕,改成2的话,霸体成功也会晕,因为晕的动画优先替换一切受伤动画(除了死亡的),而当身和霸体也是受伤动画。
      ---训练模式中,血量有个自动程序进程监控,一旦发现不大于0,就把它修改为1。如果血是锁定大于0的,那么就打不死,因为死亡条件判断时,血量被锁成大于0,死亡条件不成立,所以那个人物的死亡动画没机会取代受伤动画出现。
      ---眩晕的判断,各个游戏不一样,但都存在所谓眩晕值那么个参数,攻击也会减少对手的眩晕值,少于0就眩晕,和扣血一样,不同的是各个人物的眩晕值总量不同,不同游戏的设置也不同,就象不同游戏人物的血量设置不同一样。你可以认为眩晕也是一种特定的死亡动画,它制作成和死亡动画差不多的效果(死亡和眩晕动画都和被打倒一样),唯一不同的是,眩晕后站起来会进入晕着站立。不同游戏解眩晕的规则不同,这里不介绍了。
      


      IP属地:黑龙江3楼2011-08-05 09:45
      回复
        3--指令优先级规则:
        格斗游戏系统在游戏播放的每一动画帧中,都要顺序完成下列步骤一次:
        ---第一步:计算机都把玩家当前 帧 输入的指令保存下来,并顺便记录这个指令输入的时刻,按钮是否中途松开等信息。
        ---第二步:调出指令优先级列表。越复杂的指令优先级越高。
        比如说 前+拳 的抓比 拳 的普通拳击优先判断,下〉前+拳 的波动拳 比 前+拳 的抓优先级高,前〉下〉前下+拳 的升龙拳指令高于波动拳,复杂指令超杀优先级更高。
        ---第三步:将指令表中指令按照相同响应时间分类,比如响应时间20的分在一起,响应时间30的分在一起,每一类都按照优先级从高到低排列好。
        ---第四步:查找指令列表中,指令响应时间最长的那类指令的响应时间,比如说这个时间是30帧,并且从已经记录的玩家输入指令日记里面筛选从当前帧开始查找到之前30帧时可输入的指令,然后开始把这30帧之内的指令记录调出。
        ---第五步:按照指令列表的优先级从高到低来把列表中的指令逐一与玩家这30帧之内的输入记录作比较,如果最高优先级的招式指令被玩家输入,就无视后面低优先级的招式,直接发出最高优先级的那一招;如果最高优先级的招式指令没有在玩家输入记录中找到,就找排在它后面的那个招式的指令,如果找到了就发出该招,找不到就继续找下一招。直到找到玩家输入指令符合列表某个招式的指令为止,发出该招。如果都不符合,进入下一步。
        ---第六步:找到比30帧短最少时间的那一类指令,比如这个人物全系列指令的响应时间只有三类,30,20,10,那么就找到20那个系列的指令,回到第四步重新调出本帧到之前20帧以内的玩家输入指令存档,也按照优先级判断符合哪一招来出招。如果都不符合,就找到10那个系列的指令,回到第四步继续调出本帧到之前10帧以内的玩家输入指令存档,按照优先级检查该出哪一招。
        我们知道,玩家指令可能是比较乱的,或者时间上不严格的,所以,实际上格斗游戏的指令判断是个很高技术的程序。
        一般来说,格斗游戏指令比起其他游戏要复杂多了,首先我们说,基本的输入类型只有2种:
        1--按住
        2--松开
        但是按住多久后松开,哪些按钮同时按下,这里就有很多复杂情况,都要分别写程序判断。
        对于一个不用按住任何按钮发出指令的人物来说,只要记录玩家什么时间输入什么指令,然后从内存中逆时间顺序提取出来对比即可,但也有如下情况:
        1--单独按下一个攻击键,这个最好办,直接判断是什么按钮即可
        2--同时按下多个攻击键,这就麻烦了,真正的同时按下是很不容易的事情,所以实际上一般的格斗游戏中,都设定有一个缓冲时间,比如同时按下3个按钮的指令,即使玩家是不同时按下三个按钮的,只要第一个按钮按下到第三个按钮按下的总时间不超过这个缓冲时间,就被计算机认为是同时的。所以,后〉下〉前〉上+拳这种指令,就算你发成后〉下〉前〉拳+上也照样是成立的,只要最后的拳和上输入间隔不超过游戏规定的缓冲时间。
        3--顺序按下按钮的指令,这个是更麻烦的。如何让计算机把下〉前+拳不至于判定为 下+前+拳 呢?这里就要求 下 这个指令输入时刻,到 前 或者 拳 这两个按钮中先按下的那个按钮的按下时刻 的时间差一定要超过游戏规定的缓冲时间。
        所以,就算是一个没有蓄力技能的人物的指令判断,也是时刻要检测缓冲时间条件的。
        这可不像RPG或即时战略等游戏中只要鼠标和键盘操作符合规程就可以触发功能那样不需要时间差判断来区分功能。
        这说明格斗游戏指令判断已经很复杂了,但实际上,格斗游戏中还存在蓄力技能这玩艺。
        蓄力时间不同来发出不同招式的人物比比皆是。
        甚至有些游戏有力度控制,以按住按钮的时间长短来作为“力度”的标准。
        一个蓄力人物的指令列表中,有蓄力时间不同的多种招式存在,计算机在游戏进行中,不仅要判断缓冲时间相关的指令条件,还要判断蓄力时间,蓄力时间本身就要考虑到中途又没有松开这个按钮的情况出现,除此之外,请注意:
        比如 后(按住)〉后(松开)〉前+拳 这个指令,按住后的过程实际上在 前+拳输入之前就结束了,所以,除了判断按住后得过程总时间达不达到指令列表中的蓄力最短时间标准,还要判断松开后那一瞬间距离输入 前+拳 的最初时刻的时间差是不是已经超过了缓冲时间。如果没有超过,那么这个指令实际上是 后(按住)〉后+前〉后(松开)+前〉前+拳,这就不符合指令表的规定,也就不能正确出招。
        


        IP属地:黑龙江4楼2011-08-05 10:38
        回复
          抄录笔记观看中
          高三开始前多做笔记方便有空闲时空想系统制作方法...


          31楼2011-08-22 20:01
          回复
            恩...确实呢...
            对空无效,对地无效,用2DFM都很方便实现...
            把霸体和挡身完全融入在受伤里...
            - - 不过扣HP方面似乎要以后仔细考虑一下呢...
            嘛...反正高三的话还是可以...


            32楼2011-08-22 20:38
            回复
              学习了


              IP属地:上海35楼2014-11-25 17:15
              回复
                好东西。


                36楼2014-11-25 21:27
                回复