【Cocos Creator 3.5实现赛车游戏】10.实现汽车节点的运动逻辑

转载 知识星球 | 深度连接铁杆粉丝,运营高品质社群,知识变现的工具

项目地址: 赛车小游戏-基于Cocos Creator 3.5版本实现: 课程的源码,基于Cocos Creator 3.5版本实现

上一节的学习后,您已经完成了对汽车节点的控制逻辑,所在在这一章您将会实现让汽车节点去响应对汽车的控制。在这之前您需要想一下真实世界中汽车的漂移的逻辑,在现实中假设一辆汽车以一定的初速度进入一个左转的弯道,这个弯道是一个完美1/4的圆形,汽车如果以我们在电视上看见的漂移方式经过,则需要以弯道的圆心为轨迹的圆心,受力方向一直指向圆心才能通过这个弯道。根据这个过程,在游戏中我们将简化成如下逻辑:汽车的转弯的轨迹是绕左前轮或者右前轮发生旋转,发动机的牵引力的方向永远和车头的方向保持一致,速度方向则不需要干预。

  1. 实现求一个点绕另一个旋转的函数:

上面的过程您一定可以看出来,我们需要用到一个点绕另一个点旋转的函数,这个函数如下:

您可能不太理解上面一系列的计算变化,你可以按住control键或者command键来查看api说明,或者您也可以不用理解计算过程,直接按照注释调用这个函数就好。

  1. 实现汽车节点的左转/右转的旋转点选择逻辑:

汽车在左转/右转的时候的旋转点分别是汽车节点的左上顶点/右上顶点,假设此时汽车节点的angle为0,我们通过以下逻辑就可以计算出对应的旋转点坐标:

但如果此时汽车节点的angle不为0,则需要将求出来的旋转点再绕汽车节点的中心节点旋转对应的angle的角度,如下:

  1. 实现转弯效果

我们在我们这个游戏中假设如果汽车方向盘向左打死则1秒钟可以旋转300度。当然在现实世界中每秒旋转多少度是和速度相关的,但是在我们这当前情况下先假设为和速度无关。所以用左转举例,当汽车节点发生左转时每一帧的update函数都需要先根据detalTime来计算出一帧内汽车节点应该转过了x度,然后把当前汽车节点的坐标设置为绕上一步的旋转点旋转过x度后的坐标,再把汽车节点的angle加上x度。所以具体逻辑如下:

  1. 测试转弯效果:

现在update方法的代码如下:

现在我们保存好然后在浏览器中运行,我们试着点击小车的左侧或者右侧,因为还未实现前进或者后退的效果,所以可以看到小车发生了类似扭扭车的效果:

  1. 处理前进和后退时的阻力系数

在前面的章节中我们将汽车节点的刚体的linearDamping设置为了10,当时为了简化我们把linearDamping当做了力来处理。实际上linearDamping表示的是阻力衰减系数,就像是摩擦力中的摩擦系数u一样,所以把刚体的linearDamping设置为10时,相当于刚体收到的阻力为刚体质量*10,这显然是非常不合常理的。

实际情况是汽车在运行时,假设地面摩擦系数不变,汽车速度越高,虽然受到的地面摩擦力不变,但是空气阻力会越来越大,直到空气阻力加摩擦阻力的大小等于发动机牵引力时,汽车达到匀速运动。

所以,刚体组件的线性阻力是一个随速度变化的值。在我们的代码中我们可以简化一下,当发动机没有牵引力时只考虑摩擦阻力,发动机有牵引力时只考虑空气阻力。我们将汽车的初始摩擦阻力系数(代码中变量名为fixLinearDamping)设置为与实际上沥青路面摩擦系数相差不多的0.9:

  1. 加入前进和后退逻辑

我们先设定三个基本变量:

当当前状态为向前加速的时,则为speedForce每秒加上aSpeedForce;如果当前状态为减速,则为speedForce每秒减去aSpeedFoece;如果不加速也不减速,则speedForce以一个固定的速度进行衰减。综上,代码如下:

现在作用于速度上的力的数值已经计算出来了,只需要将其按照车头指向方向施加给汽车就好了,当然要注意,当状态处于倒车时力的方向是取反的:

同时倒车状态时转向也与正向行驶时相反,所以需要对判断左右转向的方法也进行改动:

  1. 代码验证

保存好项目,在浏览器中运行,您将会看到小车的运动状态已经符合您的操纵了:

下一章我们将会学习如何制作和引入地图。

相关推荐
一生躺平的仔8 小时前
TypeScript入门(九)装饰器:TypeScript的"元编程超能力"
typescript
MiyueFE8 小时前
让我害怕的 TypeScript 类型 — — 直到我学会了这 3 条规则
前端·typescript
向宇it8 小时前
【unity游戏开发——网络】网络游戏通信方案——强联网游戏(Socket长连接)、 弱联网游戏(HTTP短连接)
网络·http·游戏·unity·c#·编辑器·游戏引擎
前端拿破轮9 小时前
😭😭😭看到这个快乐数10s,我就知道快乐不属于我了🤪
算法·leetcode·typescript
前端_ID林9 小时前
每个开发人员都应该知道的 TypeScript 技巧
typescript
奋飛11 小时前
TypeScript系列:第六篇 - 编写高质量的TS类型
javascript·typescript·ts·declare·.d.ts
ii_best14 小时前
按键精灵 安卓脚本开发:游戏实战之自动切换账号辅助工具
游戏
Alfred king10 天前
面试150跳跃游戏
python·leetcode·游戏·贪心算法
D1555408805810 天前
游戏护航小程序源码游戏派单小程序搭建游戏代练小程序源码
游戏
BillKu10 天前
Vue3 + TypeScript + xlsx 导入excel文件追踪数据流转详细记录(从原文件到目标数据)
前端·javascript·typescript