godot.bk4:how to make NPC roam and attack player with global variable‘s usage

1.为什么会有重力的影响:因为CharacterBody2D默认的代码是重力影响的,删掉即可

只需要添加

extends CharacterBody2Dconst SPEED = 200.0
var directionfunc _physics_process(delta):direction = Input.get_vector("ui_left", "ui_right", "ui_up", "ui_down")if direction.x == 0 or direction.y == 0 :passvelocity = direction * SPEEDmove_and_slide()

 因为现在的图像是静止的,所以这样直接就完成了:move_and_slide()和位置直接+的区别是:一个参与碰撞,位置直接加不参与碰撞

2.直接在player节点下面挂一个相机,并且把相机和屏幕放到一起,就会跟随角色,zoom越大,相机越小

3.敌人闲逛注意事项

1.地图1152*648太大了,我把图片缩小到0.08
2.代码实现:
敌人:

extends CharacterBody2D@onready var timer = $Timer
var SPEED = 300
var dir = Vector2.RIGHT
var move = falsefunc random_something(arr):  #获取一个随机数arr.shuffle()return arr.front()func _physics_process(delta):if timer.is_stopped():  return if !timer:timer.set_wait_time(random_something([1, 0.5, 0]))  timer.start()if move:#dir = random_something([Vector2.RIGHT, Vector2.LEFT, Vector2.UP, Vector2.DOWN])velocity = dir * SPEED * deltamove_and_slide()func _on_timer_timeout():move = !movedir = random_something([Vector2.RIGHT, Vector2.LEFT, Vector2.UP, Vector2.DOWN])pass # Replace with function body.

注意的是,为什么一直抖动,这是最重要的:
dir = random_something([Vector2.RIGHT, Vector2.LEFT, Vector2.UP, Vector2.DOWN])
因为move为true的话,我们一直在改变方向导致的,所以放到了定时器被执行的时候才改变方向并且只设置一次
我方:

extends CharacterBody2Dconst SPEED = 500.0
var directionfunc _physics_process(delta):direction = Input.get_vector("ui_left", "ui_right", "ui_up", "ui_down")if direction.x == 0 or direction.y == 0 :passvelocity = direction * SPEED * deltamove_and_slide()#position += direction * SPEED * delta

为什么不直接position += direction * SPEED * delta,因为这样会缺少碰撞逻辑

4.敌人追逐注意事项

1.玩家位置必须更新,敌人如何拿到:通过全局变量:点击项目--项目设置--自动加载,自己创建一个Global.gd文件,不要挂载到任何一个节点,放到自动加载里头:

写入:

extends Nodevar pos = Vector2(0, 0)

2.为什么敌人一直向左上角走:因为创建节点的时候,节点的位置sprite2D的位置是不一样的;position拿到的是节点的位置不是精灵的位置;创建节点的时候,必须先把节点的位置sprite2D的位置统一起来

如图,1,2,3分别表示node节点的位置,用户感知的精灵sprite的位置和参与现实碰撞的位置,尤其注意节点位置,不要忘记 

3.知道上述之后,做出追逐的方法其实就有很多了,这里列举最简单的一种(Global.gd在上面已经贴过)

1)玩家,把位置数据同步到全局变量

extends CharacterBody2Dconst SPEED = 3000.0
var directionfunc _ready():add_to_group("player")func _physics_process(delta):direction = Input.get_vector("ui_left", "ui_right", "ui_up", "ui_down")if direction.x == 0 or direction.y == 0 :passvelocity = direction * SPEED * deltamove_and_slide()#position += direction * SPEED * deltafunc _process(delta):Global.pos = global_position

2)敌人,拿到全局变量,往那个方向跑

extends CharacterBody2Dconst SPEED = 1500.0
var is_atttackfunc _physics_process(delta):if is_atttack:position += (Global.pos - position) / SPEEDfunc _on_area_2d_body_entered(body):if body.is_in_group("player"):  //没有这一行,开局就会和map碰撞,直接卡死is_atttack= truepassfunc _on_area_2d_body_exited(body):is_atttack= falsepass


 

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

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

相关文章

第一周:计算机网络概述(上)

一、计算机网络基本概念 1、计算机网络通信技术计算机技术 计算机网络就是一种特殊的通信网络,其特殊之处就在于它的信源和信宿就是计算机。 2、什么是计算机网络 在计算机网络中,我们把这些计算机统称为“主机”(上图中所有相连的电脑和服…

【Java】---- SpringBoot 统一数据返回格式

目录 1. 统一数据返回格式介绍2. 实际应用2.1 添加前后的返回结果区别2.2 存在问题 3. 统一数据返回格式的优点 1. 统一数据返回格式介绍 通过使用ControllerAdvice和引用ResponseBodyAdvice接口来进行实现。 ResponseBodyAdvice这个接口里面有两个方法,分别是: s…

【专利 超音速】基于分类模型的轻量级工业图像关键点检测方法

申请号CN202311601629.7公开号(公开)CN117710683A申请日2023.11.27申请人(公开)超音速人工智能科技股份有限公司发明人(公开)张俊峰(总); 杨培文(总); 沈俊羽; 张小村 摘要 本发明涉及一种基于分类模型的…

外星人Alienware m16R1 原厂Windows11系统 oem系统

装后恢复到您开箱的体验界面,包括所有原机所有驱动AWCC、Mydell、office、mcafee等所有预装软件。 最适合您电脑的系统,经厂家手调试最佳状态,性能与功耗直接拉满,体验最原汁原味的系统。 原厂系统下载网址:http://w…

VB.net实战(VSTO):Excel插件设计Ribbon界面

1. 新建Ribbon 1.1 开发环境 Visual Studio 2022 1.2 解决方案资源管理器中右击My Project 1.3 添加》新建项 1.4 office/SharePoint》功能区(可视化设计器),双击 2.调出工具箱 Visual Studio 2022》视图》工具箱 3.设计界面 3.1 添加功能区选项卡 3.2拖动Group…

深度强化学习+大模型综述Survey on Large Language Model-Enhanced Reinforcement Learning

论文地址:[2404.00282] Survey on Large Language Model-Enhanced Reinforcement Learning: Concept, Taxonomy, and Methods (arxiv.org) 摘要 对 LLM 增强 RL 中现有文献进行了全面的回顾,并总结了其与传统 RL 方法相比的特征,旨在阐明未…

混合A*算法详解(一)路径搜索

描述 为了学习一下混合A*算法,我前面介绍了车辆运动学及非完整约束、差速轮及阿克曼运动学模型、Dubins曲线和RS曲线,现在终于可以看一下混合A*算法的相关内容了。 原文名称:Practical Search Techniques in Path Planning for Autonomous D…

Mac解决command not found:mvn 保姆级

1.背景 mac电脑已经安装了jdk1.8。如果不清楚自己jdk安装位置的可以到idea查看。但是命令行执行 mvn 会报 command not found 2.解决方案 默认安装的 jdk 是没有配置环境变量,因此需要手动配置 通常如果是默认安装则路径都会一样直接复制即可,只需更…

驱动开发之设备树语法

0.设备树由来 通过前面platform实验,使用platform总线,device与driver需要匹配才可以,device主要是存储一些硬件信息的,传递给driver使用。这样就会导致大量的硬件信息在linux内核源码里面,arch/arm/mach-xxx 和 arch…

undefined symbol: _ZN3c104impl8GPUTrace13gpu mmcv

这里写自定义目录标题 ImportError: //python3.8/site-packages/mmcv/_ext.cpython-38-x86_64-linux-gnu.so: undefined symbol: _ZN3c104impl8GPUTrace13gpuTraceStateEERROR conda.cli.main_run:execute(49): 这样的问题往往都是版本不匹配导致的 pytorch的版本,m…

【C++】类和对象1.0

本鼠浅浅介绍一些C类和对象的知识,希望能得到读者老爷们的垂阅! 目录 1.面向过程和面向对象 2.类的引入 3.类的定义 4.类的访问限定符及封装 4.1.类的访问限定符 4.2.封装 5.C中struct和class的区别 6.类域 7.类的实例化 8.类对象模型 8.1.类…

线性代数|机器学习-P5特征值和特征向量

文章目录 1. 特征值和特征向量1.1 特征向量1.2 向量分解 2. 矩阵相似2.1 特征值求解法-相似2.2 特殊特征值2.3 反对称矩阵 3.对称矩阵 1. 特征值和特征向量 1.1 特征向量 假设有一个n行n列的方阵A,有 n 个不相同的特征值为 λ \lambda λ,特征向量为 x 1 , x 2 , …

(2022,扩散模型,评分函数,数据流形的内在维度,SVD)使用扩散模型估计数据流形的维度

Your diffusion model secretly knows the dimension of the data manifold 公和众和号:EDPJ(进 Q 交流群:922230617 或加 VX:CV_EDPJ 进 V 交流群) 目录 0. 摘要 1. 引言 2. 相关工作 3. 背景:基于评…

【YOLOv5/v7改进系列】引入Slimneck-GSConv

一、导言 GSConv旨在平衡模型的准确度与速度,针对自动驾驶车辆中目标检测任务设计。从类脑研究中得到的直观理解是,具有更多神经元的模型能够获得更强的非线性表达能力。但是,不容忽视的是生物大脑处理信息的强大能力和低能耗远远超过计算机…

二、Nginx目录结构与基本运行原理

目录 一、目录结构 二、运行原理 一、目录结构 我们使用tree 命令查看nginx的目录。如果tree 命令失效,需要安装tree工具 [rootlocalhost local]# yum install -y tree[rootlocalhost /]# tree /usr/local/nginx /usr/local/nginx ├── client_body_temp # PO…

C语言 | Leetcode C语言题解之第129题求根节点到叶节点数字之和

题目: 题解: int sumNumbers(struct TreeNode* root) {if (root NULL) {return 0;}int sum 0;struct TreeNode* nodeQueue[2000];int numQueue[2000];int leftQueue 0, rightQueue 0;nodeQueue[rightQueue] root;numQueue[rightQueue] root->v…

Vue——初识组件

文章目录 前言页面的构成何为组件编写组件组件嵌套注册 效果展示 前言 在官方文档中,对组件的知识点做了一个很全面的说明。本篇博客主要写一个自己的案例讲解。 vue 官方文档 组件基础 页面的构成 说到组件之前,先大致说明下vue中页面的构成要素。 在…

手写数据集minist基于pytorch分类学习

1.Mnist数据集介绍 1.1 基本介绍 Mnist数据集可以算是学习深度学习最常用到的了。这个数据集包含70000张手写数字图片,分别是60000张训练图片和10000张测试图片,训练集由来自250个不同人手写的数字构成,一般来自高中生,一半来自工…

MTU相关随笔

一、MTU的概念 MTU(最大传输单元):用来通知对方所能接受数据服务单元的最大尺寸,说明发送方能够接受的有效载荷大小。MTU是包或帧的最大长度,一般以字节记,如果过大在碰到路由器时会被拒绝转发&#xff0c…

SpringBoot项目本地运行正常,jar包运行时前端报错403:No mapping for......

SpringBoot项目本地运行正常,jar包运行时前端报错403:No mapping for… 提示:在部署jar包到云服务器上之前,一定要在本地运行jar包,查看前端代码是否运行正常,若报错的话可以节省很多时间 方式:…