---
title: "2D横版格斗"
image: "https://wiki.wrightkit.dev/og.png"
---

> Documentation Index
> Fetch the complete documentation index at: https://wiki.wrightkit.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# 2D横版格斗

> 仅解析核心规则，不解析平衡等其他规则

## 规则1：限制玩家的移动方向

事件
* 持续 - 每名玩家
* 队伍 双方 全部

条件
* 已重生(事件玩家) == 真

动作
* 开始限制速度(事件玩家, 0, 1, 0, 1, 0, 0)

解析
* 通过“开始限制速度”，让玩家只能向前和向后移动，不能左右移动

## 规则2：调整摄像头位置

事件
* 持续 - 每名玩家
* 队伍 双方 全部

条件
* 存活(事件玩家) == 真
* 在重生室中(事件玩家) == 假

动作
* 开始镜头(事件玩家, 矢量(加(除(X方向分量(位置(事件玩家)), 2), -164.250), 加(除(Y方向分量(位置(事件玩家)), 4), 12), 200.600), 矢量(加(除(X方向分量(位置(事件玩家)), 2), -164.250), 加(除(Y方向分量(位置(事件玩家)), 4), 12), 180.600), 10)

解析
* 眼睛位置的X，Y，Z坐标计算：
  * X：(英雄的位置 / 2) - 164.25
  * Y：(英雄的位置 / 4) + 12
  * Z：200.6
* 望向位置的X，Y，Z坐标计算：
  * X：(英雄的位置 / 2) - 164.25
  * Y：(英雄的位置 / 4) + 12
  * 180.6
* 这两个数是怎么得出来的？当然是在游戏里找出来的。没有什么特别的理由，只是这个角度比较舒服。不同地图数值不一样，你也可以自己找其他更舒服的数值

## 规则3：强制英雄Z坐标

事件
* 持续 - 每名玩家
* 队伍 双方 全部

条件
* 绝对值(减(180.6, Z方向分量(位置(事件玩家)))) > 0.250
* 存活(事件玩家) == 真
* 已重生(事件玩家) == 真
* 在重生室中(事件玩家) == 假

动作
* 传送(事件玩家, 矢量(X方向分量(位置(事件玩家)), Y方向分量(位置(事件玩家)), 180.600))
* 等待(0.250, 无视条件)
* 如果条件为“真”则循环

解析
* 上面我们已经设置了强制移动，为什么这里还要来一条？因为我们要考虑到一些位移技能，例如狂鼠的炸弹。
* 这条规则便是每隔0.25秒，就检测英雄的Z坐标是否与180.6差别过大，如果过大，则强制移动回这个坐标
* 180.6这个坐标是根据地图测量出的

## 规则4：强制英雄朝向

事件
* 持续 - 每名玩家
* 队伍 双方 全部

条件
* 绝对值(Z方向分量(面朝方向(事件玩家)))) > 0.050
* 存活(事件玩家) == 真
* 已重生(事件玩家) == 真
* 在重生室中(事件玩家) == 假

动作
* 设置朝向(事件玩家, 乘(矢量(1, 1, 0), 面朝方向(事件玩家)), 至地图)
* 等待(0.250, 无视条件)
* 如果条件为“真”则循环

解析
* 和上面类似，这也是为了防止意外的英雄镜头改变
* 这条规则便是每隔0.25秒，就检测英雄面向的Z坐标是否与0差别过大（0是刚好垂直于X/Y平面），如果过大，则强制朝向这个坐标
* 这里有一个取巧的地方：使用了矢量乘法，取得了(英雄面向X, 英雄面向Y, 0)这个矢量

## 规则5：重生传送

事件
* 持续 - 每名玩家
* 队伍 队伍1 全部

条件
* 存活(事件玩家) == 真
* 已重生(事件玩家) == 真
* 在重生室中(事件玩家) == 真

动作
* 传送(事件玩家, 矢量(加(-350.000, 随机实数(0, 5)), 11.800, 180.600))
* 设置朝向(事件玩家, 矢量(1, 0, 0), 至地图)

解析
* 传送英雄到相应位置
* 设置英雄朝向

Source: https://wiki.wrightkit.dev/zh/tutorial/2d/index.mdx
