当前位置: 首页 > news >正文

【基于Cocos Creator实现的赛车游戏】9.实现汽车节点的控制逻辑

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

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

在上一节的课程中,您已经实现了通过触控给刚体施加里的方式来对汽车节点进行简单的控制。在这一章节中,我们将会实现实现一套完美的控制小车运动的逻辑。不过在这之前,您需要理解一些基本概念。

一、基本概念

1. 节点的旋转角度:

节点的旋转角度是angle参数,如果这个参数大于0则向左旋转,小于0则向右旋转。你可以在start方法中指定下节点的angle数值来看下旋转的效果:

您可能已经猜到了,我们可以通过设置angle的数值来实现转弯的效果。但是angle是不带有圆周率值的,所以在参与sin或者cos计算时,需要用misc.degreesToRadians

方法来将angle值转化为相对于圆周率的值。

二、实现

现在您已经明白了上面的基本概念,现在我们要实现对汽车节点的精确控制。大概效果是用户点击屏幕任意位置,小车都将会调转方向至触控点所在的方位并运动过去。现在请看下面的步骤来一步一步实现:

1. 给刚体添加阻力:

在上一节结束后,您会发现小车在施加的情况下会越来越快,在不受力的情况下保持静止或者匀速直线运动而难以控制,根据基本物理知识您一定可以猜到是因为刚体没有收到类似摩擦力的阻力。所以我们要让刚体时刻都有与触控方向施加的力大小相同但方向相反的阻力。那么如何为刚体添加阻力?您只需要在Car节点的属性检查器中找到刚体组件,将Linear Damping(线性方向的阻力)属性的值设定为您想要的阻力值即可,效果如下:

当然记得将node节点的UITransform的宽度和高度设置为和CarSprite的宽度和高度一致,因为后面还会挂载碰撞体,node的大小影响碰撞体的大小,碰撞体的大小会影响其他物理属性,所以就先让刚体所在的node节点的大小与CarSprite的大小统一,设置完成后效果如下:

2. 实现左转/右转的判断:

对于转向,在收到用户点击时,我们可以先获得触控点的世界坐标,再获取到汽车节点(汽车的根节点Car及其所有子节点都在随着Car上面的刚体组件运动)的世界坐标。假设现在汽车还未发生过旋转,也就是说汽车节点的angle值为0,车头此时指向正前方,此时如果以汽车节点所在的点为原点做个坐标系,则效果如下:

您可以非常直观的看到,只要我们求出来触控点此时相对于以汽车节点位置的坐标,然后对这个相对坐标来判断他的x大于0即为向右,x小于0即为向左。

但是这是在车头面向正前方的情况,当车头有一定旋转角度时,就相当于坐标轴旋转了一定角度,所以在汽车节点angle不为0的时候,相对坐标还要加一层坐标轴旋转后的计算。通过百度找到了一篇写求坐标点绕原点旋转后新坐标的值的博客(求在平面直角坐标系中,一个点绕坐标原点旋转一定角度后点的坐标_一点绕另一点旋转一定角度的坐标_IT集装箱的博客-CSDN博客),但是我们现在的情况是坐标点不变而坐标系旋转,但是也不难,点旋转了x角度就相当于坐标系旋转了-x度,反之亦然,所以只需要把上面博客公式中的x换为-x就可以了,sin(-x)=-sin(x),cos(-x)=cos(x)。所以综上,touchInput中判断向左还是向右的代码逻辑为:

3. 实现向前/向后的判断:

有了上一个对左转右转的判断,我相信您已经知道该怎么判断向前还是向后了。判断向左还是向右是判断相对位置的x值,同理,判断向前还是向后只需要判断相对位置的y值就可以了。具体代码如下:

4. 将touchInput的方向控制系统引入到CarControl中:

没啥说的,请您直接看代码:

5. 测试一下控制系统:

VS Code和Cocos Creator中保存好,然后运行一下,在浏览器界面中点击屏幕来模拟触控,查看输出是否正确:

屏幕上面是我点击右前方的输出。注意,如果您的电脑是Mac,请不要轻点触控板而是将触控板按下去。

以上就是本章节的全部内容,到现在为止您已经学会了实现汽车节点的方向控制逻辑。下一个章节我们将会实现汽车的运动逻辑。

相关文章:

【基于Cocos Creator实现的赛车游戏】9.实现汽车节点的控制逻辑

转载知识星球 | 深度连接铁杆粉丝,运营高品质社群,知识变现的工具 项目地址:赛车小游戏-基于Cocos Creator 3.5版本实现: 课程的源码,基于Cocos Creator 3.5版本实现 在上一节的课程中,您已经实现了通过触控给刚体施…...

蓝蓝设计为教育行业提供软件UI交互设计服务

在教育行业,软件的用户体验设计对于提供优质教育体验至关重要。教育行业软件用户体验设计需要考虑到学生和教师的需求,以及教育环境的特殊性。为了确保设计的成功,选择一家专业的设计公司是至关重要的,而北京蓝蓝设计公司就是您的…...

Java从入门到精通-类和对象(二)

0. 类和对象 3. 类的构造方法 构造方法是一种特殊的方法,用于创建和初始化对象。构造方法的名称必须与类名相同,它没有返回值,并且在创建对象时自动调用。构造方法的主要作用是确保对象在创建时具有合适的初始状态。 以下是构造方法的基本概…...

Python解析MDX词典数据并保存到Excel

原始数据和处理结果: https://gitcode.net/as604049322/blog_data/-/tree/master/mdx 下载help.mdx词典后,我们无法直接查看,我们可以使用readmdict库来完成对mdx文件的读取。 安装库: pip install readmdict对于Windows平台还…...

线性代数的本质(四)

文章目录 行列式二阶行列式 n n n 阶行列式行列式的性质克拉默法则行列式的几何理解 行列式 二阶行列式 行列式引自对线性方程组的求解。考虑两个方程的二元线性方程组 { a 11 x 1 a 12 x 2 b 1 a 21 x 1 a 22 x 2 b 2 \begin{cases} a_{11}x_1a_{12}x_2b_1 \\ a_{21}x_…...

FreeMarker详细介绍

FreeMarker详细介绍 FreeMarker FreeMarker概述 FreeMarker概念 FreeMarker 是一款 模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具。 是一个Java类库…...

房地产小程序 | 小程序赋能,房地产业务数字化升级

随着科技的不断发展,房地产行业正逐渐向数字化转型。在这个过程中,房地产小程序成为了一种重要的工具,可以帮助房地产企业提供更好的购房体验、增加销售额,并实现管理的便捷化。 优点 便捷购房体验:房地产小程序为用户…...

Databend 开源周报第 110 期

Databend 是一款现代云数仓。专为弹性和高效设计,为您的大规模分析需求保驾护航。自由且开源。即刻体验云服务:https://app.databend.cn 。 Whats On In Databend 探索 Databend 本周新进展,遇到更贴近你心意的 Databend 。 使用 BendSQL 管…...

开源大模型ChatGLM2-6B 1. 租一台GPU服务器测试下

0. 环境 租用了1台GPU服务器,系统 ubuntu20,GeForce RTX 3090 24G。过程略。本人测试了ai-galaxy的,今天发现网友也有推荐autodl的。 (GPU服务器已经关闭,因此这些信息已经失效) SSH地址:* 端…...

SQL10 用where过滤空值练习

描述 题目:现在运营想要对用户的年龄分布开展分析,在分析时想要剔除没有获取到年龄的用户,请你取出所有年龄值不为空的用户的设备ID,性别,年龄,学校的信息。 示例:user_profile iddevice_idge…...

JVM--Hotspot Architecture 详解

一、Java Virtual Machine (JVM)概述 Java Virtual Machine 虚拟机 (JVM) 是一种抽象的计算机。JVM本身也是一个程序,但是对于编写在其中执行的程序来说,它看起来像一台机器。对于特定的操作系统&#xff…...

ThreadLocal功能实现

模拟ThreadLocal功能实现 当前线程任意方法内操作连接对象 一个栈对应一个线程 , 一个方法调用另一个方法都是在一个线程内 , 只有执行了线程的start方法才会创建一个线程 定义一个Map集合 , key是当前线程(Thread.currentThread) , value是要绑定的数据(Connection对象) 以…...

Linux编辑器-vim使用

文章目录 前言一、vim编辑器1、vim的基本概念2、vim的基本操作2.1 命令模式切换至插入模式2.2 插入模式切换至命令模式2.3 命令模式切换至底行模式 3、vim命令模式命令集3.1 移动光标3.2 删除文字3.3 复制与粘贴3.4 替换3.5 撤销上一次操作3.6 更改3.7 跳至指定的行 4、vim末行…...

自助式数据分析平台:JVS智能BI功能介绍(二)数据集管理

数据集是JVS-智能BI中承载数据、使用数据、管理数据的基础,同样也是构建数据分析的基础。可以通俗地将其理解为数据库中的普通的表,他来源于智能的ETL数据加工工具,可以将数据集进行分析图表、统计报表、数字大屏、数据服务等制作。 在整体的…...

《5G技术引领教育信息化新革命》

5G技术引领教育信息化新革命 随着5G技术的快速发展,教育领域也迎来了全新的信息化时代。5G技术为教育行业提供了更高速、更稳定、更智能的网络连接,使得教育信息化不再局限于传统的课堂教学,而是延伸到了线上、线下的全时空教育。本文将详细介…...

cmake学习过程记录

目录 基础命令学习配置opencvcmake (Windows版本) 基础命令学习 //设置最低版本号 cmake_minimum_required(VERSION 3.5)//设置项目名称 project (hello_headers)//递归遍历文件夹src中的cpp文件放到变量SOURCES中 file(GLOB_RECURSE SOURCES src/*.cpp)//设置目标exe名称…...

Vue3、Vite使用 html2canvas 把Html生成canvas转成图片并保存,以及填坑记录

这两天接到新需求就是生成海报分享,生成的格式虽然是一样的但是自己一点点画显然是不符合我摸鱼人的性格,就找到了html2canvas插件,开始动工。 安装 npm install html2canvas --save文档 options 的参数都在里面按照自己需求使用 https://a…...

centos yum源配置(CentOS7 原生 yum 源修改为阿里 yum 源)

文章目录 centos yum源配置centos搭建内网yum源内网centos的yum软件源配置CentOS7 原生 yum 源修改为阿里 yum 源 centos yum源配置 centos搭建内网yum源 您好,在CentOS系统上搭建本地内网YUM仓库的方法如下: 安装httpd和createrepo工具 yum install httpd createrepo -y创…...

linux————ansible

一、认识自动化运维 自动化运维: 将日常IT运维中大量的重复性工作,小到简单的日常检查、配置变更和软件安装,大到整个变更流程的组织调度,由过去的手工执行转为自动化操作,从而减少乃至消除运维中的延迟,实现“零延时”…...

初识Java 8-1 接口和抽象类

目录 抽象类和抽象方法 接口定义 默认方法 多重继承 接口中的静态方法 作为接口的Instrument 本笔记参考自: 《On Java 中文版》 接口和抽象类提供了一种更加结构化的方式分离接口和实现。 抽象类和抽象方法 抽象类,其介于普通类和接口之间。在构…...

ubuntu搭建nfs服务centos挂载访问

在Ubuntu上设置NFS服务器 在Ubuntu上,你可以使用apt包管理器来安装NFS服务器。打开终端并运行: sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享,例如/shared: sudo mkdir /shared sud…...

React hook之useRef

React useRef 详解 useRef 是 React 提供的一个 Hook,用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途,下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...

基于Flask实现的医疗保险欺诈识别监测模型

基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施,由雇主和个人按一定比例缴纳保险费,建立社会医疗保险基金,支付雇员医疗费用的一种医疗保险制度, 它是促进社会文明和进步的…...

理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端

🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...

Linux-07 ubuntu 的 chrome 启动不了

文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了,报错如下四、启动不了,解决如下 总结 问题原因 在应用中可以看到chrome,但是打不开(说明:原来的ubuntu系统出问题了,这个是备用的硬盘&a…...

Unit 1 深度强化学习简介

Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库,例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体,比如 SnowballFight、Huggy the Do…...

Java 二维码

Java 二维码 **技术&#xff1a;**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...

Python Ovito统计金刚石结构数量

大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...

C/C++ 中附加包含目录、附加库目录与附加依赖项详解

在 C/C 编程的编译和链接过程中&#xff0c;附加包含目录、附加库目录和附加依赖项是三个至关重要的设置&#xff0c;它们相互配合&#xff0c;确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中&#xff0c;这些概念容易让人混淆&#xff0c;但深入理解它们的作用和联…...

BLEU评分:机器翻译质量评估的黄金标准

BLEU评分&#xff1a;机器翻译质量评估的黄金标准 1. 引言 在自然语言处理(NLP)领域&#xff0c;衡量一个机器翻译模型的性能至关重要。BLEU (Bilingual Evaluation Understudy) 作为一种自动化评估指标&#xff0c;自2002年由IBM的Kishore Papineni等人提出以来&#xff0c;…...