指令宝贝格斗游戏

tkadmin 游戏资讯 2024-03-23 24 0

谢邀。

指令宝贝格斗游戏
(图片来源,侵删)

问题描述中红丸的出招指令是错的这个事我就不细说了,反正也不是重点。

先谈谈你的设计思路。

之一,

指令宝贝格斗游戏
(图片来源,侵删)

。拿KOF举个例子,→·→是跑动,↓·↗是大跳;MD幽游白书中甚至有纯方向指令的必杀技,如飞影的残像、阵的空中浮游。这些指令用你的系统是判断不出来的。

第二,你用一个所谓缓冲区去存所有的指令,触发某个技能的时候清空对吧?那我问你,

这种功能你如何实现?比如说波动拳(取消)真空波动拳,实际指令简化是↓↘→P↓↘→P,但是按你的设计,波动拳触发的时候就把前面的↓↘→给清掉了,然后自然就放不出真空。

指令宝贝格斗游戏
(图片来源,侵删)

我说说真正是怎么实现的。

你可以用状态机的概念来理解,但是注意:出招检测主要使用的并不是角色的状态,而是

拿波动拳来说,指令是↓,↘,→,P。

一开始是等待输入↓。当系统检测到↓被输入的时候,就进入等待↘️的状态,检测到↘️时则继续进入下一个状态,等待输入→。

关于输入时间限制,通常有这么几种方案:

例如HyperII采用的是多段式,也就是↓(犹豫期X1)↘(犹豫期X2)→(犹豫期Y)P。同一个必杀技中方向指令之间的犹豫期是一样长的,最后的按键分轻中重有差异,你可以看做是不同的技能。像PPP同按这种必杀技必须同时输入。

(日本玩家实测数据:

你可以简单想象成类似这样的结构:

到实际游戏中,每帧再像下面这样处理。我这里为了方便你理解,使用的是类似OO的伪代码。实际老一点的街机游戏都是在算法中直接写内存地址和偏移量的。

注意,我再强调一遍,

。简单示意如下:

(技能/状态/计时器)

波动拳:0,0

升龙拳:0,0

旋风脚:0,0

(假设这三个技能的摇杆犹豫期都是固定6帧、按键犹豫期10帧)

第1帧输入↓,

升龙拳:0,0

波动拳:1,6(激活)

旋风脚:1,6(激活)

第2帧不变,

升龙拳:0,0

波动拳:1,5(激活)

旋风脚:1,5(倒计时)

第4帧输入↘,

升龙拳:0,0

波动拳:2,6(进入下一状态)

旋风脚:1,3(继续倒计时)

第7帧输入→,

升龙拳:1,6(激活)

波动拳:3,10(进入下一状态)

旋风脚:1,0(时间到,下一帧复位)

第11帧输入P,

升龙拳:1,2(倒计时)

波动拳:4,0(触发)

旋风脚:0,0

大概就是这样的感觉。我上面示意的算法还模拟了

中提到的「入力再開1フレーム」现象,例如摇杆拉住→(经过X帧后)↓↘+P,如果输入↓的时候正好是升龙计时归零的那一帧,那么之前输入的→并不被承认,于是也就发不出升龙拳。再晚一帧的话,由于归零后重新接受了→,指令就是有效的了。

拿上面的例子说,如果你没有输入↘,而是在第8帧(复位)时才输入,那么之前的↓相当于被抹掉了,最后是发不出波动的。

蓄力系指令有单独的蓄力计时器,这里不赘述,作为程序员你应该有能力类推出来怎么实现。

Match按键输入和指令的具体实现我也没有提,这对于游戏手感其实是有很大影响的——

举个例子,街霸中按键和抬键都算作输入。

像前面说的波动取消真空波动,↓↘→P(按住)↓↘→P(抬起)也能承认。要实现这一点,在处理按键的时候就不能只拿按键当前状态,而是要考虑把「按键状态变化」当成事件。设置一个极小的缓冲区就可以解决。

再例如KOF中的←↙↓↘→P这一招,

在KOF96中是必须每个方向都摇到位才可以。

KOF就不同了:实际指令变成了←↓→P,而↙在KOF中视为同时输入了←和↓,因此只输入↙(两帧以上)→P就可以摇出来。同理,←↘→P也是可以的。

但是←↘P就不行,因为它最后一个方向要求严格匹配,必须要单独输入→才可以。输入→之后可以随便输入其它方向,例如←↓→↘P也可以。像跳跃中↓↘→K这种必杀技,可以在地面上直接输入↓↘→↗K(也就是所谓低空凤凰脚)。KOF中,大部分必杀技只要是犹豫期内完成输入,最后按键的时候摇杆在哪个方向都无所谓,换句话说↓↘→↖K可以后跳低空凤凰脚。KOF99就不行,↓↘→↗的技术还存在,但是↓↘→↖是不接受的,含有←要素的方向会强制取消掉↓↘→系的指令。

更多系统实测可以参见

看到这你应该差不多基本明白指令扫描是怎么回事了。顺带着应该也能明白模拟器上的简化出招的几种原理(其实都是改内存):

2024.2.28 修改回答 ——

KOF'96的方案:

0:预留了60帧的输入缓存,每个角色最多11种出招方式,有各自容错时间。

1:当前输入是否匹配招式最终触发按键(分别测试每个招式)。

1.1:如果最终按键不匹配,回到1继续测试下一招式。

1.2:如果最终按键匹配,计时器=1,n=2。

2:如果 计时器>容错时间,回到1继续测试下一招式。

3:测试输入缓存的前1帧是否匹配招式的倒数第n个方向或按键。

3.1:如果匹配,n+1。

4:如果已经测完一个招式的全部预想,发出相应招式。

5:计时器+1,回到2继续测试。

(每个角色都有不同的招式测试顺序,一般升龙优先于波动,超杀优先于必杀。)

KOF'94的方案:

0:每个角色最多8个招式,预留8个计数器,每个输入的容错时间都是8帧。

1:当前输入是否符合招式计数器指向的预想输入(分别测试每个招式)。

1.1:如果符合,招式计数器+1。

1.2:如果不符合,输入容错时间-1。

1.2.1,如果容错时间=0,招式计数器和容错时间回到初始值。

2,招式计数器是否达到招式预想的操作数(每个招式不同)。

2.1,达到了,发出相应招式。

2.2,未达到,回到1继续判断下个招式。

KOF'95的方案基本同'94,但容错时间的形式同'96。

KOF'~'2002基本沿用'96,只是增加了一些方向和按键的匹配细节。

《街霸2》的方案整体思路同'94。不同点 1-每个招式都是单独写的测试代码;2-容错时间基本都是9帧;3-轻攻击容错时间多4帧,中攻击多2帧;4-360度旋转、单键蓄力再松开 这两种特殊的出招方式。

《霸王忍法帖》的方案整体思路同'96。不同点 1-出招方式更多种;2-按角色分,各类招式统一测试,但测试代码共用。

---------------------------------------------------------

以下是原始回答于2021.11.12

---------------------------------------------------------

偶然看到7年前的问题,强行回答一下。

拳皇为例,96以后的方案:

1,预留了60帧的输入缓存,每一帧都会确定一下是否匹配触发按键(根据招式表,最终触发按键不一样)。

1.1,如果不匹配,放弃该招式。

1.2,如果匹配,测试前一帧是否匹配招式的倒数第二个操作。

1.2.1,如果不匹配,测试再前一帧是否匹配招式的倒数第二个操作。

1.2.2,如果匹配,测试再前一帧是否匹配招式的倒数第三个操作。

哪个招式先完全匹配了,就触发该招式。

招式都有优先顺序,一般升龙优先于波动,超杀优先于必杀。

95以前的方案:

1,最多八个招式,预留8个计数器。

2,当前输入是否符合招式的之一个输入(分别测试每个招式)。

2.1,如果符合,该招式计数器+1。

2.2,如果不符合,该招式的计数器清零。

3,招式计数器是否达到招式应有的操作数(每个招式不同),达到了就发出该招式。

以上只是大致情况,细节还有很多。