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

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

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

相关推荐
灰色人生qwer10 小时前
React + TypeScript+ Vite 配置路径别名和vscode智能路径提示
vscode·react.js·typescript
木兰不吃草11 小时前
如何在 Mac 上下载安装仙剑游戏仙剑世界?可以通过IPA砸壳包安装非常简单
游戏·macos·ios·游戏程序·mac
cv也要开心12 小时前
Cursor 开源平替 Cline 到底是如何实现的?本文带你刨根问底
前端·typescript·cursor
Bluesonli2 天前
第 16 天:游戏 UI(UMG)开发,打造主菜单 & 血条!
学习·游戏·ui·ue5·虚幻·unreal engine
有来技术2 天前
「vue3-element-admin」Vue3 + TypeScript 项目整合 Animate.css 动画效果实战指南
javascript·css·typescript
Artistation Game2 天前
三、Unity基础(主要框架)
游戏·unity·c#·游戏引擎
m0_748257463 天前
TypeScript 与后端开发Node.js
javascript·typescript·node.js
又逢乱世3 天前
JavaScript 发起网络请求 axios、fetch、async / await
前端·javascript·typescript
借来一夜星光3 天前
【Vue3 入门到实战】15. 组件间通信
前端·javascript·vue.js·typescript
Bluesonli4 天前
第 14 天:UE5 C++ 与蓝图(Blueprint)交互!
c++·游戏·ue5·交互·unreal engine