从触摸事件到新框架。 ARTris-第3部分

本文是有关 ARTris 的系列文章的第3部分 使用ARKit,Node.js和Firebase构建的多人实时3D AR Tetris游戏。 如果您是本系列的新手,我们建议您从 介绍 开始 分叉 iOS客户端和游戏引擎存储库以开始实验。

今天,我们将引导您完成从滑动手势到新客户状态的各个步骤。

为了支持下降块的移动和旋转,我们将屏幕分为两个视图。 左视图处理旋转,而右视图处理移动手势- 。 这些手势会在player-id节点下作为rotatemove的子级推送到Firebase。

游戏引擎期望玩家的动作与游戏坐标系有关。 为了确保玩家可以在俄罗斯方块网格上自由移动,我们应该将玩家的动作从他们的视点坐标系映射到游戏的坐标系。

例如,如果您围绕网格移动了180度并向右滑动,则该图块应移至当前的right 。 但是我们不能向右推到Firebase,因为在游戏坐标系中解释的向右会将方块移到您当前的左边

这令人困惑,我们感觉到您! 这就像在照镜子时戴上耳环。

为了解决这个问题,我们从游戏开始就使用玩家绕y轴(欧拉角)的旋转来将动作从视点坐标映射到游戏坐标系。 在前面的示例中,我们将right动作解释为left

使用欧拉角找到玩家的方向

为了确保所有玩家都看到相同的游戏状态,我们决定使iOS客户端保持无状态,并使用Firebase作为唯一的事实来源。 游戏引擎会进行所有数学运算。 每次滴答时,它都会计算俄罗斯方块的位置,并将更新后的状态推送到Firebase。 新状态触发观察者链,以删除旧块并绘制新游戏状态。

下一个

明天我们开始谈论后端和我们的游戏引擎。
重构游戏引擎