【重要】格斗游戏制作者必须弄清的概念,格斗游戏理论家免进
2dfm吧
全部回复
仅看楼主
level 12
厉风 楼主
[一楼喂熊]
2012年07月08日 19点07分 1
level 12
厉风 楼主
【一】关于“帧”的各种混乱:
格斗游戏中与“帧”有关的是5个概念,经常被理论界(主要指战术打法理论界)不加区分的乱用:
1---脚本运行周期T:
例如有一个游戏系统进程,每隔一段时间(例如T)检查一下人物血量然后修改血条长度。
一般来说,游戏中把这段时间长度T设定为游戏程序运行的最短周期,也就是我们这里说的脚本运行周期概念,每隔这个最短周期,系统检测一次人物血量并修改血条长度。
这个运行周期决定了游戏程序能够在多么短的时间里响应玩家操作。
有很多游戏可以设定游戏速度,游戏速度提高对应了程序运行的加快,其实就是因为游戏速度的高档设置要求脚本运行周期T 减小,例如原来是T=0.01秒,游戏速度提高一档时则是 T=0.005秒,相当于原来每秒执行程序脚本100次,现在变成每秒执行200次。
有人喜欢用程序所规定的那个“游戏图像的最短刷新时间(frame)”来代替脚本运行周期的概念,例如有种错误认识“kof98中攻击判定的运行周期是2frame”,这就是把脚本运行时间T和“图像按程序刷新周期frame”搞到一起去了。
我们说,你认为是2frame运行一次攻击判断,只是你在以图像刷新作为参照的时候得出的结果。
而程序具体是多长时间判断一次攻击判定,与你按照攻击命中后图像的改变时间来“猜测”的结果是没有必然关系的,因为你没有任何理由可以证明图像改变与攻击判定完成是同步的(实际上完全可以攻击判定成立后等一段时间再改变人物图像)。
当然,大家玩游戏,而不是做游戏的时候,很少需要提到脚本运行周期T这个概念,但是不代表由此衍生的一系列误会不存在,很多格斗游戏研究者经常说游戏输入指令的响应时间是多少frame,这个说法实际上是有问题的。
以2dfm为例,它生成的是个游戏速度可调的游戏。游戏速度设置为高速条件下,图像和脚本运行的频率都提高了,但是输入响应呢?是的,没提高!
街霸2x里面有一个选项可以将游戏速度降为超级街霸2(最早的16人版)的速度,但输入指令的响应速度变慢了吗?没有!
kof98中有一个参数用来决定人物的动画速度,你修改这个参数会影响指令输入的响应速度吗?绝对不会!
因此,图像的frame与判定指令的脚本运行周期T根本不是一个概念,也不可以用frame替代T来说问题。
2---显卡图像刷新率fps:
这是显卡每秒钟输出图像的改变次数。和游戏本身的程序执行周期无关,和游戏本身每隔多久播放一张图像没关系,完全取决于显卡能够多久运算出一张图像并输出信号给显示器。
例如说在性能优良的电脑上,对于某一个游戏,显卡可以达到每秒200~300次图像输出(也就是200~300fps),但该游戏程序规定图像的改变频度最快可能只要每秒100次(1秒相当于脚本运行周期100次,即100T),那么就表明电脑渲染图像的能力远超游戏程序要求。
在比较差的电脑上,显卡对该游戏只能达到每秒输出50张画面(50fps),而游戏按照每个脚本运行周期播放一张图像,就是每秒100张画面(1秒相当于脚本运行周期100次,即100T),那么显卡就达不到游戏要求,画面就会“跳帧”。
也就是说,显卡的运算能力以及游戏画面程序的计算复杂程度决定了fps指标。
由于“跳帧”这个概念的存在,所以很多人习惯把fps也叫做“帧”,这又是一个误会!
3---显示器刷新率Hz:
显示器每秒中刷新多少次画面。这取决于显示器的扫描速度(电子枪扫描完一副画面需要多久,每个液晶像素灯泡要多久改变一次颜色状态)。
一般来说,这个数值现在都在80~90Hz左右,与程序没有任何关系,也不会受到显卡性能的影响。
实际上我们都不可能从显示器上看到显卡输出图像有多流畅,我们只能看到显卡性能不足时,画面有多卡,但是游戏画面卡和显示器刷新率没任何关系。显示器刷新率低只会导致视疲劳和视力下降,游戏画面卡却不会对视力有任何影响,如果你能找到老式显示器,把刷新率修改到10Hz(每秒刷新10次画面),就能明显看到
2012年07月08日 19点07分 2
其实本帖没有鄙视格斗游戏理论家的意思,我自己就是一格斗游戏“理论家”,标题是故意那么写的,为了增加仇恨,吸引眼球[滑稽]
2014年03月25日 03点03分
level 12
厉风 楼主
画面高频率低忽亮忽暗闪烁,暗的瞬间就是画面新一轮扫描没有完成的时候。
4---真正的“帧”frame(图像按程序刷新周期,图像停留时间单位):
游戏动画图像的 最短刷新时间,由程序的设置决定。
从游戏的角度来说,不是所有游戏的动画刷新都和脚本运行周期同步。
很多游戏的动画播放间隔实际上都比脚本运行周期T要长。
也就是说,在这些游戏里,所有图像的最短停留时间里,一些周期性判定脚本的运行次数可能大于一次。说白了,在任何一副停留最短暂的图像改变之前,游戏系统可能已经做了至少2次程序判定。
而我们所说的frame(帧)指的是图像停留的最短时间单位,虽然前面我们说过这个时间在理论上可以是脚本运行周期T,但是一般来说,实际情况并非如此。
脚本运行周期是用于一些常规循环判断的脚本(例如变量值判断,攻击判定,小规模寻路)的一次运行,这些常规循环判断程序通常对机器运算量要求极小。
而图像运算通常是大规模读取数据和计算的过程,即使是几万像素的小图片的读取和像素位置计算,其计算量也是常规算路程序不能比的。
因此,要完成常规的判断程序(例如攻击判定)的运行,需要很短的运行时间即可,而且为了提高游戏的玩家输入响应灵敏度,这类响应程序的运行周期都很短,远远短于计算出一幅新画面的时间。
因此,常规游戏里的图像更新时间(frame帧)要比脚本运行周期长。
但有一些游戏中,设计者故意设定间隔比较长的时间才重复执行一次程序判断任务,原因是不需要过于频繁进行判定来增加机器不必要的运算负担,这种情况下的脚本运行周期T是大于图像刷新时间(frame帧)的。
基于上面的分析,我们要分清帧和T的关系,虽然很多人以为这两者可以混同,但它们并不是一回事,而且这个区分是在制作游戏时非常重要的。
我们制作程序时,总是要把“脚本运行周期T”和“图像按程序刷新时间frame帧”分开考虑,对于某一周期运行的程序来说,我们也许需要它的运行频率高于图像刷新的频率,那么它的T就要高于游戏的帧。
而有些不需要那么频繁重复执行的程序,其T可以低于帧。
对2dfm来说,软件允许我们重复执行程序的最小T是相当于1frame帧,即所有重复运行的脚本步骤可以被我们设置为间隔1帧重复执行一次。
但实际上我们如果这么频繁地运行判定脚本,是不稳定的,可能会运行出错,且有一个规律:fm95已经存在的那些脚本,在2dfm中几乎都可以稳定以T=1frame的周期重复运行。但2dfm比fm95新增的那些种类的脚本,都不能以这么频繁的方式运行。
有必要提到的是,2dfm新增类型脚本在winxp中稳定执行脚本的最短脚本运行周期是2帧,即判定脚本运行一次之后,至少要经过图像停留时间为2(就是软件中提到的100相当于一秒那个“停留时间”,这个描述的不严谨问题我们还要再说)的时间后再次运行才是稳定的。
在2dfm自称游戏速度10的条件下,现实1秒时间里,2dfm的图像刷新量大约是100幅图,即1秒=100帧,这就是2dfm里面“停留时间”自称“100相当于1秒”这句话的由来。
但你要清楚这句话是有游戏速度的前提的。
如果你调整到游戏速度20,“停留时间100帧相当于1秒”就是扯淡了(那个状态下停留时间100帧相当于2秒,全是慢动作)。
我们为什么要区分“停留时间单位frame”和“脚本运行周期T”呢?因为在游戏速度20那样的慢速下,你让游戏每隔1frame运行一次脚本,它居然是稳定的!而在游戏速度10之下,你需要每隔2frame才能稳定运行一次判定脚本!在游戏速度1下,你需要隔4frame才能稳定运行一次判定脚本,如果你的游戏设定脚本重复判定的frame数量太少,就不能正确运行。
因此我们需要搞清T和frame的差别。
5---关键帧:
这是一个素材制作方面的概念。实际上2dfm中一连串的动画,是由多幅单独图像组成的(每幅图停留不同长度的时间)。
很多美工喜欢把每一幅图叫做一帧,其实这里说的就是关键帧。
当我们说一套动作需要多少帧来构成时,一般说的就是这套动作包含多少张不同的图片,也就是有多少个关键帧(在构成动画时,有些图像是被重复利用的,重复利用多次的同一张图也被视为同一个关键帧)。
这种说法就很容易与图像按程序刷新的周期frame混淆,因此我们不推荐把“多少张素材图”说成“有多少帧图”。
2012年07月08日 19点07分 3
level 12
厉风 楼主
待续
2012年07月08日 19点07分 4
level 5
顶风大[臭美]
2012年07月10日 09点07分 5
level 12
厉风 楼主
【二】攻防属性:
这是许许多多人犯晕的地方,尤其是当你根本不去思考一款游戏该如何制作(也就是思考那许多的格斗游戏功能具体要如何实现)的时候,你很难搞清这些“真相”。
很多研究格斗游戏打法的理论家会和我们提到的格斗游戏的攻防属性大致会有这些:
1--普通攻击(分上中下段,上中下的分法据说是日本游戏官方提出的,但是请注意:游戏官方提的东西很多都是骗人的,你要是一位官方不想误导你,你就继续幼稚去吧)
2--投掷攻击
3--格挡(又分为 防御格挡 霸体格挡 和 当身格挡)
好吧,这些东西我们仔细说说在格斗游戏理论界,这些概念到底指什么:
1--普通攻击指的是能够被对手防御,但如果对手没有防御,就能打伤对手使之进入一个特定的受伤动作(该动作中,对手的一切输入都被游戏系统无视)。
普通攻击的“普通”两字是相对“投掷攻击”来说的,可以把投掷攻击称为特殊攻击。从这个意义上来说,普通攻击已经包含了磨血攻击(敌人防御成功后还要按比例损血)或飞镖攻击。
2--使对手防御无效而被我方攻击成功,攻击命中后可以操纵对手进入某个被摔的动作(同样无视指令输入),这类攻击统统称为投掷攻击。
请注意:格斗游戏理论界通常把攻击命中后控制敌人的招式也算成是投掷,虽然有些时候这类招式可以被防御。
投掷攻击在格斗理论界并没有严格划定为“使防御无效的攻击”,而是着重于“可以控制对手”。
3--格挡似乎是一种防护手段,但实际上在格斗游戏理论界的概念中,它一般定义为有挡住敌人攻击对自己进行防护的技能的统称。实际上这里并不包括一般的纯粹阻挡(禁止敌人穿越那种),而是专指针对“普通攻击”有效的格挡,其所谓的有效指的不是不掉血,而是不会被强制进入某个受伤动作(输入指令无效的那个状态)。
而所谓防御格挡,就是一般条件下用来单纯抵挡对手攻击的招式(大部分游戏里是通过按后方向键或者专门的防御键来使用)。
霸体也被视为是此类招式,只不过存在于某些攻击招式中,使用含有攻击键的指令发出,效果也是挡下对手攻击(挡下的同时也和防御一样不会被强迫进入受伤状态,而是维持霸体招式的动作,就像防御成功后维持防御动作一样,但与防御不同,霸体不会被击退)。
无论防御还是霸体,都在某些情况下是伤害免疫(也就是防御成功后防御方完全不掉血)的,而在另一些情况下根据对方攻击力按某个伤害比例(防御的比例值都小于1,霸体则可以等于1)掉血。
而有特殊意义的是当身格挡。所谓当身就是做出某个动作后,就是进入当身状态,在这个状态结束前,只要被敌人“普通攻击”命中,就不仅不会受伤,还会反过来控制攻击方,因此一般被叫做“格挡反控”。
当身状态如果一直没有被攻击,那么也不会对敌人具有任何攻击性。
上面这些技能类型还可以区分主动或被动使用,因为在不同游戏中,主动被动使用的情况都有,但这种区分没有太大意义,最多就是某种细化分类。
实际上我们更重视的在具体功能上的细化分类:
1---普通攻击 并非如想象的那么简单,它分为所为上中下段攻击,原则上来说,这是游戏官方提出的说法,好像是很靠谱的,而且一般来说,上中下的划分很形象:
上段攻击高度都在人物上半身或者头顶上方空间,人物站立防御(动作为防护自己的头和上身)可以成功防御这种攻击。
下段攻击高度都在人物下半身,人物站立防御时,由于防护的是上身,所以会被这类攻击下半身的攻击“击破防御”(姑且这么说,但是等你看了后文就知道这是扯淡)。而人物蹲着防御时,全身都缩在一起进行防护,而且人物蹲下时身高变小,全身进入防御状态,此时可以完全防御下段攻击,而上段攻击高度太高(打人物站立时的上身),人物蹲下后,这些上段攻击都在人物头顶上打空气,所以看似是被蹲防御躲避了,所以无法破坏蹲防御(但实际上并不是因为这个原因才使上段攻击不能破坏蹲防御,后文有介绍)。
问题就出在所谓中段攻击:
中段攻击一般被游戏官方解释为:攻击人物腰间高度时,能破坏人物的蹲防御,却能被站立防御成功防住的攻击。
一般大家都认为,这很合理嘛,因为蹲着防御都是把头露出来,中段攻击刚好打这个高度,所以能破坏蹲防御。
大多数游戏中,跳跃系的攻击招式都能破坏蹲防御,官方的解释就是当跳跃攻击出现的高度刚好是中段攻击的高度的时候,就符合中段攻击的要求,具有破坏蹲防御的功能。
看起来似乎很合理?
于是很多人会这么以为:
跳攻击其实和上段攻击没什么具体区别,只是当它降到特定高度的时候,就具有了打破蹲防御的功能,换句话说,上段攻击也同样可以在这个高度时破坏蹲防御,于是似乎理论家们茅塞顿开,这不就完全解释了为什么有些站立系的“中段技”也能破坏蹲防御?
通过这一系列的思考,格斗游戏理论界甚至得出了一个最终结论,防御技能本身一定存在着某个“防御区域”,攻击打中这个区域内的时候,判定的是防御成功,攻击如果打到人物在这个防御区域外的可受伤区域,就造成人物受伤,所谓破坏防御就是这么回事!
(理论家们很激动,但是我告诉各位,这种设想显然是被游戏官方误导了,因为游戏根本不是这么做的!所以说别以为是官方说的东西就是可信的!)
2---投掷攻击分为 可被防御投掷 和 防御无效投掷,前者能被防御,后者不能被防御。
其实真的如此简单吗?请看后文分解。
3---防御、霸体、当身已经是很细致的分类了,理论界对此没有更多的分类,要说更细的分类,无非就是防御分为按后防御(被动防御,按后的同时对手要攻击我方才能判定出现这类招式)和按键防御(不管对手如何行动,我方按下防御键就能维持防御状态),霸体分为无损霸体(完全不受伤的硬挡)和有损霸体(我方挡下对手攻击,同时会受伤,但由于霸体都存在于攻击招式里,因此可以维持攻击招式不被打断),当身分为反控当身(被敌人攻击后反控对手,对手强制被控制,无法防御我方这个反控制的攻击)和反击当身(被敌人击中后立即作出反击,但反击可以被敌人防御)

2012年07月10日 22点07分 6
level 12
厉风 楼主
【警告】本楼可能颠覆你对格斗游戏的常规理解!
我不想说废话,本楼直接讲一下格斗游戏的攻防属性到底有哪些,它们到底如何工作的,顺便对比上文说说理论界究竟有哪些理解误区。
格斗游戏从制作领域来说,真正的招式类型是这样划分的(括号里为简称):
攻击类:打、抓、控、伤
防御类:抵、疗、解、唤
1--打:打攻击的特点就是以一个攻击范围接触对手的受伤范围,可以在某些条件下引起对手防御或者破坏对手防御,但无论是否破坏对手防御,都是打伤对手,所谓打伤对手就是攻击击中后强制让对手进入一个不能自控的受伤动作去。也就是说,即使是防御成功,实际上也是进入了一个受伤动作,只是姿势看起来是防御成功。
至于什么条件下能破坏对方防御,并不是看攻击属性或者对方防御属性,而是看攻击招式自带的一个“按情况激活对方受伤动作的列表(简称:敌人反应表)”。
也就是说,“防御区域”这种东西是根本不存在的。
2--抓:抓和打类似,都是用一个攻击范围去接触对手的受伤范围,但不会引发对手进入任何的受伤动作,但只要接触成功,在某些条件下就可以立即激活一些平时用不出来的招式。
3--控:不许任何接触,强制控制对手移动到我方人物附近指定位置,并使敌人进入某个不能自控的被抓动作。
4--伤:上述招式都可以对于对手血量没有任何扣除,而 伤 则是扣除对手一定血量(有时是加血),并不需要有什么特定条件(但通常都是与上述三类招式混合出现),也有单独出现的!
5--抵:我方攻击区与敌人攻击区相互接触成立后,并不导致敌人进入受伤状态,但却可以激活一些我方平时用不出来的招式。
6--疗:我方自己给自己加血(有时是扣血)。很少单独出现,一般与其他防御类招式混合出现。
7--解:被敌人攻击后进入不能自控的受伤状态,或者被敌人控制后进入被能自控的被抓状态时,强制从不能自控状态转入某个平时我方不能使出的招式。
8--唤:叫出一个飞镖或者宠物或者援护或者其他任何独立于人物本体但辅助人物本体的东西。

2012年07月10日 22点07分 7
level 12
厉风 楼主
根据上面的8类招式,我们说说常见游戏中那些按照格斗游戏理论界的分类方法给出的各类招式到底是怎么实现的:
所谓的“普通攻击”其实是 打:
根本不存在什么上中下三段攻击,打 的攻击定义脚本中附带了一个敌人在6种状态下分别会被本打击强制转入哪些受伤动作的列表(敌人反应表),6种状态分别是:
站立未防御
蹲着未防御
空中未防御
站立防御中
蹲着防御中
空中防御中
假如没有规定敌人在某一状态下被本攻击打中后改进入何种受伤动作,那么本攻击对处于那种状态的敌人就是没有攻击性的(即使攻击区和敌人受伤区重合也会打空)。
一旦规定了敌人在某种状态下被本招打中,那么敌人就会在被打中后强制进入规定的受伤动作。
因此,只要我们规定了本次攻击能在敌人站着防御时,使敌人进入受伤动作,而不是进入防御成功的动作,那么本攻击就是破坏站立防御的,即使敌人站立防御也会进入受伤状态,而不会防御成功,这就是所谓“下段攻击”的真相!
同理,空中的攻击招式大都设定了敌人蹲着防御时也会被转入受伤动作而不是进入防御成功动作,因此跳跃攻击可以破坏蹲防御,这也就是所谓的“中段技”的真相。
因此,实际上我们在很多成品游戏中都看到一些“露馅”的时候,比如一个人物蹲下之后仍然非常高,而站立系中段技能打的高度是其腹部而非头部,是应该被他的防御动作成功抵挡的,但却仍然可以破坏他的蹲防御,这就是按照格斗游戏理论界所说的“上中下段按高度分,打到防御区域之外的受伤区就算破防御”所解释不了的例子。
另外,有些游戏的人物空中向下踢的时候,脚的高度很低,如果这个人物即将落地时踢出一脚,踢中的是站里的人物的腿部,按格斗游戏理论界的解释来说这是可以破坏站立防御的,但实际上游戏中这一踢能被站立防御成功抵挡,原因就是它并不是按照攻击的高度和“防御区”的存在来判断是否能破坏防御的,而是直接判断敌人是否处于站立防御姿态,只是按照敌人姿态来判定是否破防御!
当你有模拟游戏修改器时,可以对以前的街机游戏进行修改,修改攻击区域到不同高度来试试看攻击破防御的效果,就可以验证一个结论:
无论攻击区域在什么位置,它是否破防御全看敌人处于什么防御状态,根本就和攻击区域位置无关,也根本不存在什么“防御区域”。
2012年07月10日 23点07分 8
level 12
厉风 楼主
而我们看前文所说的抓,似乎和打没有本质区别,只是会在碰到对手受伤区之后,激活一个我方平时用不出来的招式。但实际上有很大区别:
由于抓并不会导致敌人进入任何受伤动作(防御成功的动作也算是受伤动作),所以实际上它相当于没有攻击性的(类似“敌人反应表”中没有规定敌人受伤动作的情况),它相当于一个接触敌人并判断敌人存在的功能,一旦判断敌人存在于这个抓的攻击区能覆盖的范围内,它就激活一个平时不出现的招式(例如特殊的打击,或者直接控制敌人)。
而且在标准格斗游戏中,抓并不是真的没有“敌人反应表”,只是这个表和 打 的那个表功能不同,抓 的“敌人反应表”也要判断敌人当前所处的状态,但是判定内容是:
如果敌人处于受伤状态,当前的抓的攻击区无论是否碰到敌人的受伤区,都不会激活任何特殊招式。
所以我们说,真正的格斗游戏中,只要敌人已经进入受伤或者防御成功状态,抓招肯定要抓空。
而这就告诉我们,格斗游戏中的抓招只包含“抓”的那一下,而并不包含后续的攻击或者控制,后续的那些东西完全是被激活出的另一招!而且在条件不允许时(敌人已经被打伤时),后续招式是激活不出来的(即所谓抓空)。
说到这里就不得不提到有一类特殊的打击招式,它们击中敌人后,看起来不会使敌人进入任何受伤状态,却会立即转入控制敌人,似乎是一种投掷技能,而不是普通攻击技能,但却又能被防御。
你应该想到:没人告诉你打中敌人之后就不允许激活一些平时不出现的技能了!
实际上这些招式既然能被防御,它们实际上就是 打。正因为如此,它们能根据敌人处于不同状态来判断敌人被击中后是进入防御成功姿态还是受伤姿态。
只不过你可能没想到的是,它们还有一个脚本判断:只要敌人进入受伤姿态,立即激活一个平时不会出现的招式(被激活的招式可以是 打 ,也可以是 控,如果是前者,那就是一个附加打击,如果是后者,那就是一个附加控制)。
由于激活的太快,强制取消了敌人的受伤动作,所以你以为敌人没进入受伤姿态就被控制了,于是大家以为这是个“投掷技”。
玩过16人街霸的人都知道,Ken的火焰升龙拳如果在地面打中敌人(无论敌人受伤还是防御),会比平时多出一个勾拳,有些人的解释是那个勾拳平时也存在,只是存在时间太短根本看不见而已。
但实际上它是在打中的人之后被激活出来的平时根本不会出现的一招,这就是 打 技能的变种应用典型。
所以,将来有人提到草剃京的琴月阳和Ken的火焰升龙拳的时候,你可以大言不惭地告诉他们,这俩招式其实是一类东西!
如果还有人把琴月阳当作投掷技看待,你可以笑话他。
2012年07月10日 23点07分 9
level 12
厉风 楼主
控 和前两种招式的本质区别就是根本不需要接触对手,只要这招一出,敌人无论处于什么状态,都得乖乖移动到指定位置做出指定的被抓的动作。
所以,当一个抓招判定敌人就在我方身边,而且敌人没有处于受伤状态时,就能激活平时不出现的一招,如果被激活的这招是个 控,那么敌人就会立刻不由自主地被控制,任你蹂躏。
一个 抓 作为前提,激活一个 控,这两位就组成了我们平时说的“投掷技”。
但作为一个游戏制作者,你不能再去说什么“投掷技”这类外行话了,因为这玩意根本不是本质,本质是 抓 + 控。
如果换成 抓 + 打,难道你就不认识了?这不就是所谓抓着打(掴技)吗?
抓+打+控+打,就是抓到对手后先打一下,敌人没有来得及后退时立即控制他原地不动,然后追一个 打,这就是所谓的连掴技!这货是累计连击数的!
抓+控+控,每个 控 都让敌人做出一个受伤的动作,但是敌人并没被真的打中,那攻击火花也就是个附带的图形,让你看起来像是敌人被连击,但它绝对没有连击数累计!这就是没有连击数的连掴技!
有些游戏中,你会非常奇怪,敌人的闪避技能(完全没有受伤区域啊),只要经过我方身边,我方在敌人处于我方附近一段距离的范围内只要输入某个投掷技的指令,这投掷技能就能把敌人扥(den 4声)过来,敌人只要在我方身边就完全无法闪避我方这种“投掷技”,这就是所谓的无影抓。它实际上是纯粹判断敌我距离,只要敌人出在我方近身范围内,就能被指令激活的 控 招式。这招平时敌人距离我方足够远的时候,根本发不出来,但只要敌人够近,不管他是什么姿态,找抓不误。但是游戏厂商很狡猾,他们也设定这招出招前要判断敌人的状态,如果敌人已经受伤(包货已经防御成功),那么这招还是不出。所以这招看起来俨然就是一个普通的抓招,它当然也能在敌人没有出现防御时阻止敌人使用防御技能(因为如果敌人没有处于受伤姿态,这招绝对会激活,敌人根本没机会用防御就被 控 了!)。
因此,各位朋友,我在这里很负责地告诉你们,格斗游戏里面的“破防御”,水很深,你只凭表象很难识破它们的区别,它们至少是三种模式的:
1--判断敌人在我方附近一定距离内(方法可以是直接读取敌人坐标与我方坐标进行对比,还可以用一个 抓 招来判定我方能摸到敌人),然后判断敌人没有处于受伤状态,于是激活一个平时不出现的 控 技能,于是敌人被投掷了,根本使不出防御招式。
这叫做 “封防御”,就是在你没有防御时不让你使出防御。
2--普通的 打 技能通过“敌人反应表”来指定敌人在防御状态时进入受伤状态,这才叫“破防御”,因为敌人是在已经防御的前提下转入受伤的。
3--最后一种你肯定想不到,我当初发现它存在时,差点把眼睛瞪出来。
当敌方预备防御时被我方普通攻击打中,他确实也进入了防御成功的“受伤状态”,但是这货(敌人)的防御成功动作开头有个脚本检测了他自己的某个私密变量的数值(例如防御值),这个数值现在达到250,这等于告诉敌人:你现在防御值到顶了,不能再防御了。于是这个敌人立即转入防御崩坏那个动作去了,于是我方很惊讶地发现敌人故意做了一个防御崩坏的动作,这并不是我方攻击的“敌人反应表”规定的啊!但是敌人却说:根据导演和编剧的安排,我现在该表演防御崩坏了。
你懂了吗?防御崩坏就是这么搞出来的!不是攻击方打出来的,是受伤一方故意表演的!
这也是“破坏防御”,不过与前两种相区别,叫做“防御崩坏”。
2012年07月11日 00点07分 10
level 12
厉风 楼主
待续
2012年07月11日 00点07分 11
可以开楼中楼的 还有抓招判定不能攻击受伤单位用的是系统变量还是攻击中自带的不能追击?
2012年07月11日 01点07分
@BT斗士 都可以。本文不限于2dfm
2012年07月11日 18点07分
@厉风
2012年07月12日 06点07分
level 5
此贴一直在关注,受益匪浅,加油,多搞些这样的东西是格斗界的福音[Love]
2012年07月13日 01点07分 12
level 11
很有趣,表示一边制作一边看这类文,很有感觉。但目前表示,还没看懂。
2012年07月13日 01点07分 13
level 12
厉风 楼主
伤 代表能够修改对手血量的技能,一切杀伤都是靠它来实现的。
永远不要把打中敌人与使敌人受伤混为一谈,杀伤完全可以不需要击中对手就能完成。
因此,当你作为一个格斗游戏的制作者,你在头脑中必须把攻击和扣血这两件事分开来考虑,你应该清楚,对任何攻击来说,扣血都不是必然的,而对于扣血这个目的而言,也不一定必须借助攻击来实现。
在绝大多数游戏中,攻击招式一般都会给敌人扣血,但这只是将攻击和 伤 结合而已,当攻击不结合 伤 的时候,常表现为我们所见的投掷招式(抓的那个动作)。
而抓到对手之后的掴和摔,一般都不是直接打击对手,而此时它们对于对手造成伤害完全和攻击无关,而是纯粹的 伤,即直接修改对手血量。
极少数游戏里有对于对手进行治疗的招式,那也是 伤,只不过扣血变成加血罢了。
对应地,疗 指的是我方人物修改自己的血量的招式,极少数游戏里,人物拥有自疗招式,就是代表,当然也有让自己受伤的(例如某些横板过关游戏的格斗游戏版继承了一些自己消耗血量才能放出的绝招)。
当被敌人击中后,瞬间自动回血到被打中之前的数值,这就是所谓“无伤”的效果,例如防御普通攻击时人物不受伤,就是这样实现的(当然也可以通过与对手通信来让对手这次攻击无杀伤力来实现,不过基本没有人那么做游戏,有直接自动回血的简单办法不用的人纯属脑残),而游戏血条长度的刷新是有时间间隔的,在这个间隔之内回血,看起来就和从来没有掉过血一样,人物死亡的判定也有时间间隔,所以只要回血够快,就是永远不死,这就是我们能用作弊器锁定人物血量让人物即使被秒杀也不会死的原因,所谓锁定血量就等于随时自动回血。
而将 伤 和 疗 联合运用,就可以做出 吸血技能 和 捐血技能(自己损血治疗别人)。
2012年07月17日 13点07分 14
level 12
厉风 楼主
正确的
攻击招式是这样做的:
攻击的动作是一招,这个招式中判定当攻击命中时跳转去攻击命中后的动画(简称“击中后收招”,该动画才是扣血的,相当于 伤,因此,只要没有判定攻击命中,攻击招式挥空就不会对敌人造成杀伤),如果攻击被敌人防御,则会判断是让我方跳转去“无伤的击中后收招”还是“按比例减伤的击中后收招”,判断条件就是我方本次攻击是否能“磨血”。
几乎所有能被其他特殊技抵消收招的攻击招式,都是这样做的,在攻击命中后跳转去的“击中后收招”那个招式的开头一段时间里判定玩家有没有后续输入,如果符合特定的指令就能用对应的特殊技取消当前招式(击中后收招)的后续动画。
--------------------------------------------------
抵 其实就是所谓的“攻击相抵”,这是格斗游戏中的一个特殊判定,两个攻击区相撞时,如果脚本规定需要判断“攻击相抵”,那游戏系统就会进行判断,因此,并不是所有攻击招式都能相抵,没有这类判断脚本时,则攻击双方可能“相杀(互相打伤)”。
抵 的判断脚本存在时,其判断优先级最高。也就是说,只要要求判断攻击相抵成功,那么攻击命中或者攻击被防御就都不会出现了。
攻击相抵用来制作“伪霸体”是最合适的,因为“伪霸体”既能挡下敌人的攻击,还能保证自己完全不受伤。
有些游戏中专门有“攻击相抵”的判定,并允许在相抵之后“用其他特殊技取消当前攻击的收招”,具体的做法和普通攻击命中是一样的,判断“命中(本情况下就是 攻击相抵)”之后跳转去“相抵后收招”那个招式,那招式开头也有指令响应脚本判断玩家输入并判定是否取消后续动画。
对于抓招来说,做法也是类似的,都是判断 抓 的攻击是否命中,命中就跳转去“抓成功后的控制”那一招去。
对飞镖来说,它也是判断攻击命中后跳转去攻击命中后的动画,所以你才会看到它命中后有个爆开的动画出现,而飞镖飞行过程里永远不会出现这个动画。
很多人以为攻击招式就是制作一个攻击,设定了敌人反应就完事大吉了,然后就想不通特殊技取消之类的到底该怎么做。其实看似简单的一个攻击,它的命中后的动画是一个单独的招式,这才是事实!
2012年07月17日 14点07分 15
level 12
厉风 楼主
解 是SNK公司首创的一类招式,最早的代表就是 基斯·霍华德(当身技鼻祖)
所谓 解,其实就是在受伤或者受控的动作开头添加条件判断,从而在某些条件成立时,跳转到另外的招式(平时不能发动的)去
最常见的例子:
1----当身:
这就是常见的“架招”的原理,实际上使用当身技的一方,他所使出的当身技只是做了个姿势,这个姿势在程序后台修改了一个标志变量的数值,来告诉系统这个人物当前处于当身状态。
一旦他被攻击进入受伤状态,受伤招式开头都会检查这个变量的数值,如果不是那个专门代表当身状态的数值,就正常播放受伤动画,如果是那个代表当身状态的数值,就跳转到反击招式。
在不同游戏中,受伤损血的设置是不同的:有些游戏中受伤动作出现前已经损血,这类游戏中的当身技需要能自动回血到挨打之前的血量。另一些游戏中,受伤动作播放一小段时间(很短)之后才会损血,只要当身脚本判断的跳转比损血脚本早一些执行,就可以省去回血脚本。
这样就能保证当身招式是不会受伤的。
但我们说,这不是完备的当身,完备的当身还需要能判断敌人的攻击是不是飞镖,如果是飞镖,那么当身使用者就不会在受伤后跳转去反击招式,而是会老老实实播放受伤动画,这就是飞镖可以破当身的原理。
2----霸体:
被敌人攻击前如果处于“霸体”招式中,则霸体招式的每一小段动画脚本都有自己的序号。
人物受伤后进入受伤动作招式,受伤动作招式开头判断受伤前不处于霸体状态,就正常播放受伤动画,但如果判断得出受伤之前处于霸体状态,并记录了最后瞬间所处的霸体招式动画小节的序号,那就自动跳转回去那个序号对应的霸体招式动画小节去,取消受伤动画的播放,而看起来像是霸体招式被敌人攻击时,没有进入受伤状态,没有被打断。
而霸体招式被攻击时照样是要受伤的,因为他确实经历了被打伤的过程,只是他只用了一瞬间就从受伤招式跳转回来了。
这是完美的霸体。
3----受身(或拆投):
被攻击进入受伤招式,或者被控制进入被抓招式,在受伤招式或被抓招式中,添加判定玩家指令输入的脚本,判断得出玩家输入某个指令成功时,打断当前受伤或被抓招式,跳转去一个平时不能使用的招式(大部分是移动技能,用来恢复人物的活动能力),也就是受身招式,当然,被抓招式中使用的受身招式也叫做 拆投 招式。
拳皇98中的 GC吹飞反击和紧急回避(两者都要消耗能量豆) 就属于在 防御成功的招式(实质上属于受伤招式)开头一段时间内允许使出的 解 技能,只不过解除受伤动作的瞬间分别跳转到闪避招式和攻击招式而已。
4----返波:
被飞镖攻击之前,处于返波技能状态,此时被飞镖击中后,人物受伤状态开头判定受伤前处于返波技能状态,且是被对手飞镖打伤,就打断受伤动作,立即跳转去一个反向发射飞镖回敬敌人的招式
一般来说,此类招式还需要记录敌人所使用的飞镖的代号,从而在我方发射回敬飞镖时,自动选择与敌人所用的相同的飞镖,有些游戏中甚至能依靠脚本直接调用敌人对应的飞镖来作为我方回敬发射的飞镖
但这不是所有游戏中的 返波 的制作原理,只是一部分游戏采用的做法,当然,它应用了“解”这类招式
有一些 高档 的返波招式,是能被敌人人物本体的攻击打伤的,只是不会被敌人的飞镖打伤,这也需要判断攻击是不是飞镖
2012年07月27日 19点07分 16
level 12
厉风 楼主
唤:召唤援护或者宠物,或发射飞镖,给自己加护罩等等全都属于此类,无非是在人物本体之外生成一个新的有攻击能力或者受伤(含阻挡)能力的图块
很多游戏中,除了人物本体可以使用 唤 技能创建宠物或飞镖以外,宠物或飞镖还可以再次创建宠物和飞镖,即所谓 波中波。
波中波通常可用于大波吃小波(大飞镖或者多次攻击的飞镖吞噬单次攻击的小飞镖)的制作,也可以用来直接制作 返波:
即飞镖命中敌人的某个反射飞镖用的“护罩”后,自动生成一个反向飞回的飞镖,原飞镖消失,新生成的飞镖对我方人物本体具有攻击性
作为宠物来说,有些游戏中的宠物是可控制的(半自动的),能被玩家输入的指令所激活的“人物本体发号施令”招式所影响,宠物根据主人的指令做出一系列的动作,这其实是因为那些发布指令的招式修改了一个标志变量,宠物的脚本时刻检查这个变量的数值,并根据不同值做出不同反应(跳转去不同的招式)。
要制作一个能控制飞行方向的飞镖,原理也是一样的。
2012年07月27日 19点07分 17
level 12
厉风 楼主
待续
2012年07月27日 19点07分 18
问一个问题,像超级街霸4,拳皇这类格斗游戏,是多少毫秒查询一次玩家的输入的,是每帧查询一次玩家的输入吗?我想实现格斗游戏的100%目押,能否以每秒输入60次指令的方式实现
2013年04月15日 03点04分
回复 看我放月牙天冲 :每个游戏都不一样,这个取决于脚本运行周期,一般来说都是一个脚本运行周期检查一次输入,有些游戏这个周期可能只是动画帧数周期的一半甚至四分之一,相当于动画一帧检查2次甚至4次指令输入,但也有些游戏限制指令检查的频率,1~2帧动画才检查一次指令输入
2013年04月15日 15点04分
level 2
mark
2012年11月14日 14点11分 19
level 11
竟然更新了
2012年11月15日 04点11分 20
1 2 尾页