RPG游戏自动打怪之朝向判断

news2024/9/21 4:37:35

RPG游戏辅助想要做到自动打怪

获得到最近怪物信息以后 还需要面向怪物

否则背对怪物等等情况是没有办法攻击以及释放技能的

游戏设计的时候朝向是有很多种情况的

第一种

2D,2.5D老游戏,例如传奇

他的朝向一般是极为固定的4朝向或则8朝向

也就是不是自由朝向的,只能朝向 东南西北4个方位

或则 东 东北 北 西北 西 西南 南 东南 8个方位

那么朝向计算也极为简单

只要计算出怪物和人物坐标的关系即可

例如

X怪物>X人物 && Y怪物>Y人物

那么想面向怪物就把朝向值修改成面向东北方即可

一般 8个方位是0-7 8个数值表示

第二种

2D版自由朝向

说是2D版自由朝向,但实际上很多3D游戏都在运用

非常简单的理解就是游戏是3D的,但是人物转向只能2D平面转向,而头不可以上抬和俯瞰的

例如QQ西游

一般情况这种游戏的朝向值得是从0到一个数值均匀排列在坐标系上

我们只要计算出他的变化规律 即可轻松计算

例如QQ西游是从 X正轴为0 逆时针不断增加

一直增加到256然后和X轴重叠又变为0

那么知道了 其变化规律 我们就可以代码实现

如下

DWORD Call_朝向怪物角度(FLOAT x,FLOAT y)

{

T人物属性 A;

A.c初始化();

FLOAT X=A.fX;

FLOAT Y=A.fY;

DWORD B=0;

if (x>X&&y>Y)//第一象限

{

B=(DWORD)(atan2(y-Y,x-X)/3.1415926 *180);//真实角度

B=B*64/90 ;//同比例游戏角度

B=0+B;

}

if (x<X&&y>Y)//第二象限

{

B=(DWORD)(atan2(y-Y,X-x)/3.1415926 *180);

B=B*64/90 ;

B=128-B;

}

if (x<X&&y<Y)//第三象限

{

B=(DWORD)(atan2(Y-y,X-x)/3.1415926 *180);

B=B*64/90;

B=128+B;

}

if (x>X&&y<Y)//第四象限

{

B=(DWORD)(atan2(Y-y,x-X)/3.1415926 *180);

B=B*64/90;

B=256-B;

}

return B;

}

第三种

通过第一种和第二种

我们可以明显感觉到从8方位到多方位的升级

但是这还是不够的 无论你把坐标系分成多少份 还是不是绝对的自由

那怎么办呢?

游戏发明出更自由的朝向方式

例如 天涯明月刀
在这里插入图片描述
他是这样的设计理念

以人物为中心 花一个圆,一般半径为1(是多少无所谓,我们乘多少即可)

和怪物连线,于圆的交点就是我们的朝向

那么这样就变成了自由朝向了,想精确到多少都可以

计算起来也非常简单

以人物原点,圆交点,圆交点到X轴的垂线和X轴的交点 三点为一个三角形

人物原点,怪物坐标点,怪物坐标点到X轴的垂线和X轴的交点 三点为一个三角形

2个三角形为相似三角形

那么 小三角形h / 1 = (Y怪物-Y人物)/距离

小三角形l / 1 = (X怪物-X人物)/距离

得到的 h 和l 就是我们 圆交点的坐标了

还有进一步的升华的方式

就是3D版本的朝向

那么他将不再是一个圈了

是一个3D立体的球

但是算法依然没有变化

只是距离发生了变化

相似三角形依然还是相似三角形

h=(Y怪物-Y人物)/距离

l=(X怪物-X人物)/距离

z=(Z怪物-Z人物)/距离

其中距离=sqrt((人物.fX-fX)(人物.fX-.fX)+(人物.fY-fY)(人物.fY-fY)+(人物.fZ-fZ)*(人物.fZ-fZ));

第四种

一般是FPS类游戏喜欢用的

也和航天飞机等用的角度一样

就是俯冲角 摇摆角 和旋转角

其中旋转角代表着自身的旋转 ,在游戏里几乎无用

那么就是俯冲角 代表着枪支方向和水平面上下的角度

摇摆角 代表枪支方向和中线左右摇摆的角度

计算方法 参考第二种的反正切方式即可

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/564862.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数组题目总结 -- 花式遍历

目录 一. 反转字符串中的单词思路和代码&#xff1a;I. 博主的做法II. 东哥的做法III. 其他做法1IV. 其他做法2 二. 旋转图像思路和代码&#xff1a;I. 博主的做法II. 东哥的做法 三. 旋转图像&#xff08;逆时针旋转90&#xff09;思路和代码&#xff1a;I. 博主和东哥的做法 …

SpringBoot2-基础入门(一)

SpringBoot2-基础入门&#xff08;一&#xff09; 文章目录 SpringBoot2-基础入门&#xff08;一&#xff09;1. 为什么学习SpringBoot1.1 SpringBoot的优点1.2 SpringBoot的缺点1.3 SpringBoot开发环境 2. 第一个SpringBoot程序2.1 添加依赖2.2 编写主程序类 -- 固定写法2.3 编…

SpringCloud(25):熔断降级实现

熔断降级会在调用链路中某个资源出现不稳定状态时&#xff08;例如调用超时或异常比例升高&#xff09;&#xff0c;对这个资源的调用进行限制&#xff0c;让请求快速失败&#xff0c;避免影响到其它的资源而导致级联错误。当资源被降级后&#xff0c;在接下来的降级时间窗口之…

硅谷新王登国会山,呼吁加强 AI 监管;马斯克任命推特新 CEO;数字媒体巨头申请破产;欧盟通过全球首个全面监管加密资产框架 | 经济学人第 21 周

1. 硅谷新王登国会山&#xff0c;呼吁加强 AI 监管 Sam Altman, the chief executive of OpenAI, the firm behind the ChatGPT chatbot, called for tighter regulation of rapidly developing generative artificial intelligence, such as by forcing disclosure on images …

【文件操作与IO】

目录 一、文件 1、文件的定义 2、File类 &#x1f345;File类中的常见属性 &#x1f345;File类中的构造方法 &#x1f345;File类中的常用方法 二、文件内容的读取-数据流 &#x1f345;InputStream概述 &#x1f345;FileInputStream &#x1f345;OutputStream 概…

真题详解(汇总)-软件设计(八十三)

真题详解&#xff08;include&#xff09;-软件设计&#xff08;八十二)https://blog.csdn.net/ke1ying/article/details/130828203 软件交付后进入维护阶段&#xff0c;采用专门的程序模块对文件或者数据中记录进行增加、删除和修改操作&#xff0c;属于&#xff1f; 解析&a…

Netty重试一定次数后调用System.exit(n)退出应用程序(二)

System.exit()方法 原型&#xff1a;System.exit(int status) 其功能主要是调用Runtime.getRuntime().exit(status); 作用是终止当前正在运行的Java虚拟机&#xff0c;这个status表示退出的状态码&#xff0c;非零表示异常终止。(可以返回给其他进程的调用者一个调用的返回码…

RES 新的数据集 Advancing Referring Expression Segmentation Beyond Single Image 论文笔记

RES 新的数据集 Advancing Referring Expression Segmentation Beyond Single Image 论文笔记 一、Abstract二、引言三、相关工作3.1 Referring Expression Segmentation (RES)3.2 CoSalient Object Detection (CoSOD) 四、提出的方法4.1 概述文本 & 图像编码器TQM & H…

OpenStreetMap实战

介绍 OpenStreetMap&#xff08;OSM&#xff09;是一个由志愿者创建并维护的免费和开源的地图数据库。其目的是为全球任何人提供可自由使用、编辑和分发的地图数据。OpenStreetMap数据库中的地理要素包括道路、建筑、河流、森林、山脉、公共设施等。由于OpenStreetMap是开放的…

数据结构初阶 —— 二叉树链式结构

目录 一&#xff0c;二叉树链式结构 二&#xff0c;二叉树的遍历&#xff08;四种&#xff09; 前序遍历 中序遍历 后序遍历 层序遍历 三&#xff0c;二叉树接口 四&#xff0c;试题 一&#xff0c;二叉树链式结构 普通二叉树的增删查改&#xff0c;意义不大&#xff1b…

JavaScript基础扫盲

博主简介&#xff1a;想进大厂的打工人博主主页&#xff1a;xyk:所属专栏: JavaEE初阶 本篇文章为大家带来JavaScript的学习&#xff0c;一图胜千言~~~ 目录 文章目录 1.1 JavaScript (简称 JS) 1.2 JavaScript发展历史 1.3 JavaScript运行过程 二、JavaScript的基础语法 2.1 …

Linux内核源码分析-进程调度(五)-组调度

出现的背景 总结来说是希望不同分组的任务在高负载下能分配可控比例的CPU资源。为什么会有这个需求呢&#xff0c;假设多用户计算机系统每个用户的所有任务划分到一个分组中&#xff0c;A用户90个任务&#xff0c;而B用户只有10个任务&#xff08;这100个任务假设都是优先级一…

物联网手势控制小车所遇问题与解决方案

LCD1602无法显示问题 问题描述&#xff1a;按照开源社区教程完成LCD1602驱动显示程序的编写&#xff0c;成功点亮屏幕&#xff0c;开启背光&#xff0c;但无法观察到显示数据。 分析过程与解决方案&#xff1a; 1.是否IIC地址不对 使用以下代码扫描IIC总线上的设备&#xf…

Go学习圣经:队列削峰+批量写入 超高并发原理和实操

说在前面&#xff1a; 本文是《Go学习圣经》 的第二部分。 第一部分请参见&#xff1a;Go学习圣经&#xff1a;0基础精通GO开发与高并发架构&#xff08;1&#xff09; 现在拿到offer超级难&#xff0c;甚至连面试电话&#xff0c;一个都搞不到。 尼恩的技术社群中&#xf…

K近邻算法实现红酒数据集分类

目录 1. 作者介绍2. K近邻算法介绍2.1 K基本原理2.2 算法优缺点 3. KNN红酒数据集分类实验3.1 获取红酒数据集3.2 KNN算法3.3 完整代码 4. 问题分析参考链接&#xff08;可供参考的链接和引用文献&#xff09; 1. 作者介绍 路治东&#xff0c;男&#xff0c;西安工程大学电子信…

面试问题汇总

最近面试了几家公司&#xff0c;对问到的问题汇总一下。 Unity 是左手坐标系还是右手坐标系? 这个题靠记忆答的答错了&#xff0c;是左手坐标系。 大拇指指的方向是X轴&#xff0c;食指指的方向是Y轴方向&#xff0c;中指指的方向Z轴方向。 场景中游戏物体Activity为false,G…

C语言字符串函数和内存函数的介绍与模拟实现

0.前言 C语言中对字符和字符串的处理很是频繁&#xff0c;但是C语言本身是没有字符串类型的&#xff0c;字符串通常放在 常量字符串 中或者 字符数组 中。 字符串常量 适用于那些对它不做修改的字符串函数. 1.字符串函数介绍与模拟实现 C语言本身就带有一些库函数&#xff0c;所…

研发工程师玩转Kubernetes——CPU配额

在一个Pod中&#xff0c;可以有多个容器&#xff0c;比如一个主要业务容器和若干辅助业务容器。如果辅助业务容器内程序有问题&#xff0c;导致占用了大量的CPU资源&#xff0c;进而影响了主要业务容器的执行效率&#xff0c;那就需要进行干涉了。本节我们将使用“资源配额”来…

Edgedetect

边缘检测&#xff0c;检测上升沿 对于 8 位矢量中的每个位&#xff0c;检测输入信号何时从一个时钟周期中的 0 变为下一个时钟周期的 1&#xff08;类似于正边沿检测&#xff09;。输出位应在发生 0 到 1 转换后设置周期。 以下是一些示例。为清楚起见&#xff0c;in[1] 和 pe…

Jenkins+GitLab+Docker搭建前端自动化构建镜像容器部署(无本地证书,映射版本)

前言 &#x1f680; 需提前安装环境及知识点&#xff1a; 1、Docker搭建及基础操作 2、DockerFile文件描述 3、Jenkins搭建及基础点 &#x1f680; 目的&#xff1a; 将我们的前端项目打包成一个镜像容器并自动发布部署&#xff0c;可供随时pull访问 一、手动部署镜像及容器 1…