这里会显示出您选择的修订版和当前版本之间的差别。
两侧同时换到之前的修订记录前一修订版后一修订版 | 前一修订版 | ||
通过fsm实现游戏控制器 [2018/02/01 22:52] – 114.250.182.194 | 通过fsm实现游戏控制器 [2024/01/22 11:09] (当前版本) – 外部编辑 127.0.0.1 | ||
---|---|---|---|
行 18: | 行 18: | ||
控制器,就是连接操作和角色之间的一个中转器。 | 控制器,就是连接操作和角色之间的一个中转器。 | ||
当按下键盘或手柄按键的时候,会通知与键位对应的控制器,再由控制器查找与其对应的角色,实现只针对这个角色的操作传递 | 当按下键盘或手柄按键的时候,会通知与键位对应的控制器,再由控制器查找与其对应的角色,实现只针对这个角色的操作传递 | ||
- | |||
- | // | ||
- | |||
- | {{: | ||
- | |||
- | |||
- | **控制器行为** | ||
- | |||
- | 控制器的作用,就是把我们输入的操作中转一下,再通过控制器的playerID查找和他匹配的角色,并告诉他输入了什么操作。 | ||
- | 例如我按了J键,对应控制器的攻击。这样我在编写角色的攻击操作的时候就不需要写按J键攻击,而是抽象成为控制器的“攻击键”按下了,产生攻击。 | ||
- | |||
- | 为了方便的模拟按键的on pressed(按下)和is down(按住),我们需要在控制器上能够标记出这两个操作对应的结果。 | ||
- | |||
- | 这里推荐使用FSM行为,FSM行为可以轻易把按键操作转换为enter FSM和current FSM。在配置角色事件的时候将条件写为enter FSM = " | ||
- | |||
- | 为此,我们需要为控制器添加大量的FSM行为,每一个FSM对应一个按键。虽然丧心病狂,但其实一次写完就OK了: | ||
- | |||
- | {{: | ||
- | |||
- | |||
- | **按键的对应关系事件** | ||
- | |||
- | 多人游戏一般会有固定的键位操作,例如WASD对应1P,↑↓←→对应2P等等。如果是这样就可以简单的配置输入操作与控制器之间的关系了。 | ||
- | 当然,如果是可变的键位与角色匹配关系,则需要再做一次对应处理。这个后面会再说。 | ||
- | |||
- | 这里先简单的展现一下按键对应的事件配置方法: | ||
- | |||
- | {{: | ||
- | |||
- | 如图,首先pick到与键位对应的那个控制器,然后通过on pressed按键使对应的FSM行为进入on状态,通过not down来恢复到off状态 | ||
- | |||
- | |||
- | **传递应用到角色事件里** | ||
- | |||
- | 控制器配置完毕后,就可以开始配置角色的事件了: | ||
- | |||
- | * on pressed | ||
- | |||
- | {{: | ||
- | |||
- | 通过检测jump的FSM enter " | ||
- | 接下来pick到与这个控制器对应的角色,并使其进入jump状态 | ||
- | |||
- | * is down | ||
- | |||
- | {{: | ||
- | |||
- | is down事件持续进行,所以就需要先判断角色在FSM下,并用for each遍历所有的控制器和角色。 | ||
- | 通过角色pick到对应的控制器,检测到防御键处于持续按住的状态,于是进入防御状态。 | ||
- | |||
- | |||
- | |||
- | ===============未完待续================= |