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

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

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

相关推荐
Footprint_Analytics2 小时前
Footprint Analytics 助力 Sei 游戏生态增长
游戏·web3·区块链
半盏茶香6 小时前
【C语言】分支和循环详解(下)猜数字游戏
c语言·开发语言·c++·算法·游戏
PandaQue13 小时前
《怪物猎人:荒野》游戏可以键鼠直连吗
游戏
白狐欧莱雅18 小时前
使用python中的pygame简单实现飞机大战游戏
经验分享·python·游戏·pygame
豆本-豆豆奶19 小时前
用 Python 写了一个天天酷跑(附源码)
开发语言·python·游戏·pygame·零基础教程
Leoysq1 天前
【UGUI】实现点击注册按钮跳转游戏场景
游戏·unity·游戏引擎·ugui
王解1 天前
Jest项目实战(2): 项目开发与测试
前端·javascript·react.js·arcgis·typescript·单元测试
鸿蒙开天组●1 天前
鸿蒙进阶篇-网格布局 Grid/GridItem(二)
前端·华为·typescript·harmonyos·grid·mate70
zhizhiqiuya1 天前
第二章 TypeScript 函数详解
前端·javascript·typescript
初遇你时动了情2 天前
react 18 react-router-dom V6 路由传参的几种方式
react.js·typescript·react-router