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

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

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

相关推荐
天涯学馆1 小时前
Deno与Secure TypeScript:安全的后端开发
前端·typescript·deno
applebomb4 小时前
【2024】uniapp 接入声网音频RTC【H5+Android】Unibest模板下Vue3+Typescript
typescript·uniapp·rtc·声网·unibest·agora
程序猿阿伟13 小时前
《C++游戏人工智能开发:开启智能游戏新纪元》
c++·人工智能·游戏
读心悦15 小时前
TS 中类型的继承
typescript
Artistation Game15 小时前
九、怪物行为逻辑
游戏·unity·游戏引擎
妙为15 小时前
unreal engine5制作动作类游戏时,我们使用刀剑等武器攻击怪物或敌方单位时,发现攻击特效、伤害等没有触发
游戏·游戏引擎·虚幻·碰撞预设
网站领航15 小时前
服装时尚与动漫游戏的跨界联动:创新运营与策划策略研究
游戏·流量运营·用户运营
龙智DevSecOps解决方案15 小时前
Perforce演讲回顾(上):从UE项目Project Titan,看Helix Core在大型游戏开发中的版本控制与集成使用策略
游戏·ue5·源代码管理·perforce·helix core
读心悦16 小时前
在 TS 的 class 中,如何防止外部实例化
typescript
dangoxiba18 小时前
[Unity Demo]从零开始制作空洞骑士Hollow Knight第十三集:制作小骑士的接触地刺复活机制以及完善地图的可交互对象
游戏·unity·visualstudio·c#·游戏引擎