【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. 代码验证

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

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

相关推荐
Jacky(易小天)5 小时前
MongoDB比较查询操作符中英对照表及实例详解
数据库·mongodb·typescript·比较操作符
疯狂的沙粒6 小时前
如何在Vue项目中应用TypeScript?应该注意那些点?
前端·vue.js·typescript
疯狂的沙粒6 小时前
对 TypeScript 中函数如何更好的理解及使用?与 JavaScript 函数有哪些区别?
前端·javascript·typescript
螺旋天光极锐斩空闪壹式!8 小时前
自制游戏:监狱逃亡
c++·游戏
天晟科技8 小时前
GameFi的前景:游戏与金融的未来交汇点
游戏·金融·区块链
懷淰メ10 小时前
PyQt飞机大战游戏(附下载地址)
开发语言·python·qt·游戏·pyqt·游戏开发·pyqt5
张小小大智慧10 小时前
TypeScript 的发展与基本语法
前端·javascript·typescript
幼儿园的小霸王11 小时前
通过socket设置版本更新提示
前端·vue.js·webpack·typescript·前端框架·anti-design-vue
疯狂的沙粒11 小时前
对 TypeScript 中高级类型的理解?应该在哪些方面可以更好的使用!
前端·javascript·typescript
/**书香门第*/14 小时前
Cocos creator 3.8 支持的动画 7
学习·游戏·游戏引擎·游戏程序·cocos2d