首页 > 其他分享 >使用Godot4组件制作竖版太空射击游戏_2D卷轴飞机射击-碰撞框和受伤区域(六)

使用Godot4组件制作竖版太空射击游戏_2D卷轴飞机射击-碰撞框和受伤区域(六)

时间:2024-07-10 14:27:01浏览次数:19  
标签:hitbox Godot4 竖版 碰撞 射击 设置 组件 敌人

文章目录

使用Godot4组件制作竖版太空射击游戏_2D卷轴飞机射击(一)
使用Godot4组件制作竖版太空射击游戏_2D卷轴飞机射击-激光组件(二)
使用Godot4组件制作竖版太空射击游戏_2D卷轴飞机射击-飞船动画(三)
使用Godot4组件制作竖版太空射击游戏_2D卷轴飞机射击-滚动背景(四)
使用Godot4组件制作竖版太空射击游戏_2D卷轴飞机射击-敌人配置(五)

开发思路

整体开发还是基于组件的思维。相比于工厂模式或者状态机,可能有些老套,但是更容易理解和编程

教程大概是2个小时 基本上一个小时就能有游戏的雏形。

不过由于都是初学者,所以大概整体是应该4个小时左右。

本篇文章实现敌人受击消失的逻辑,约10分钟

受击区域

所有敌人都有受击区域hurtbox和碰撞区域hitbox,所以添加到enemy基础组件中,方便后续敌人都可以继承使用这两个节点

先添加HurtboxComponent和HitboxComponent到enemy组件下,作为主节点,因为后续都需要这两个节点,所以仍然需要继承

在这里插入图片描述
在这里插入图片描述
代码添加如下,仍然是ctrl拖动两个组件生成代码,然后新建消失相关代码
这段代码主要就是实现受击框与其他函数的连接,目前未完全完成
在这里插入图片描述

由于在enemy中添加了节点,那么green_enemy节点下面就有两个组件

在enemy敌人的基础节点上,你能看到很多组件都有黄叹号,这是因为他们没有碰撞形状的提示,必须要有碰撞形状
碰撞形状要在继承的green_enemy中实现,因为每个敌人都有不同的碰撞区域和大小,自然需要不同的碰撞区域来实现,无法直接继承使用

切换到green_enemy节点,添加CollisionShape2D到两个组件下

在这里插入图片描述

设置碰撞框为圆形,如下图示

在这里插入图片描述
可以修改一下debugcolor 好区分hurtbox和hitbox
具体区域设置让hurtbox略大于hitbox
主要目的hurtbox受伤框大方便击中敌人,然后hitbox碰撞区域设置小一点,让敌人更不容易攻击到自己。
在这里插入图片描述

设置碰撞层

需要设置碰撞层名称,明确每层作用
菜单栏选择项目设置,选择2D物理层,进行物理碰撞层的设置

在这里插入图片描述
一般第一个层都是世界层,但是在这个游戏中不需要世界层的碰撞层(只有该项目如此,非常态)

层1是玩家一的攻击层,层2是敌人的攻击层

在这里插入图片描述
然后就是设置层了,敌人hurtbox自然设置成2
在这里插入图片描述
而hitbox 则是需要设置mask为1
两个层为什么这么设置?
请记住,layer是当前碰撞元素的所在层,mask是能够碰撞的交互层,由于敌人要攻击玩家,自然hitbox mask设置为1

在这里插入图片描述
因此,切换到laser激光子弹,也要添加hitbox组件,然后设置形状为矩形,拖动碰撞框设置为子弹
在这里插入图片描述
子弹就不需要位于某一个具体的层,但是需要攻击触碰敌人,所以mask设置为2

在这里插入图片描述
修改world脚本代码,传递hitbox
代码修改如下,主要逻辑为:当敌人的受伤框和激光的命中框(碰撞层)接触或者相交时,判定为受伤
那么执行代码queue_free摧毁敌人
在这里插入图片描述
运行程序后,能够看到,子弹碰撞敌人后消失,那么就认为受击框添加正常
但是目前子弹不消失,如果让子弹消失,那么需要修改laser代码
让子弹接触敌人后消失
queue_free没有参数返回,但是connect中经常需要传递参数,因此需要使用unbind解绑参数
在这里插入图片描述
下一章创建敌人的受伤 爆炸销毁组件

标签:hitbox,Godot4,竖版,碰撞,射击,设置,组件,敌人
From: https://blog.csdn.net/watch361/article/details/140300774

相关文章

  • 零基础 用unity做一款FPS射击游戏-制作游戏场景(3)
    制作游戏场景需要各种的资源例如颜色图片模型动画所以我们首先要了解如何去找到资源下载到本地Unity资源商店-优质3D2D游戏制作资源平台 进入这个网站选择3D你就可以找到你所需要的各种资源了随便点击一个免费的模型  添加到我的资源然后回到我们的项目中......
  • 【校招+社招】华为OD机试 - 统计射击比赛成绩(Java & JS & Python)
    鱼弦:公众号【红尘灯塔】,CSDN博客专家、内容合伙人、新星导师、全栈领域优质创作者、51CTO(Top红人+专家博主)、github开源爱好者(go-zero源码二次开发、游戏后端架构https://github.com/Peakchen)统计射击比赛成绩(Java、JavaScript、Python和C++)算法实现问题描述:在一......
  • 第一人称射击游戏:反恐精英(CS1.6) 支持win版和mac版下载
    枪战老玩家还记得这款史诗巨作吗?Macz为广大游戏玩家倾情推出反恐精英(CS1.6)forMac,CS1.6官方下载是由著名游戏《半条命》的其中一个游戏模组(MOD)衍生而成的游戏。逼真的画面,震撼的音效,3D的视角,多样的操作融合而成,挑战你的视觉感官。玩家可以见到多个游戏方式各不相同的......
  • FPS游戏里添加物理材质后,没有击中目标时射击会报错的问题
    设置了不同的物理材质后 然后设定了子弹打中不同材质时,播放不同的命中特效 但是如果某次开枪,如果没有击中任何物体,比如天空,远处,子弹无论有没有被销毁,此次射击没有命中目标,那么系统会判定子弹产生的命中特效无访问,应该是找不到生成特效的点 只需要设置个变量布尔值,判断......
  • godot4.2 vscode配置
    launch.json文件{//使用IntelliSense了解相关属性。//悬停以查看现有属性的描述。//欲了解更多信息,请访问:https://go.microsoft.com/fwlink/?linkid=830387"version":"0.2.0","configurations":[{"name":......
  • (学习)godot4.2 Android调试
      1勾选远程部署  2安装Android构建模板  3cmd运行以下命令获取debug.keystorekeytool-keyalgRSA-genkeypair-aliasandroiddebugkey-keypassandroid-keystoredebug.keystore-storepassandroid-dname"CN=AndroidDebug,O=Android,C=US"-valid......
  • 攻击类型判断——玩家射击对DC131无效
    目标创建接口并编写接口逻辑(核心)启用DC131的“玩家远程攻击无效”思路使用接口代替系统自带的`ApplyDamage`节点,作为攻击传递将玩家攻击使用列举分为近战和远程两种攻击敌人在接收伤害时会判断玩家的攻击类型使DC131免疫玩家的远程攻击1.创建接口并编写接口逻辑创建......
  • 【Godot4自学手册】第二十七节自定义状态机完成看守地宫怪物
    本节,我将使用自定义状态机实现看守地宫怪物,完成了基础类State,状态机类StateMachine的编码,实现了怪物的闲置巡逻类、追踪类和攻击类,以及对应动画等。这节代码有点多,不过还好,代码比较简单。最终效果如下:一、基本概念状态机(StateMachine)是有限状态自动机的简称,是指一个数学......
  • 简易的射击坦克小游戏(easyx)的而从开发
    引言在网上看到了一个利用easyx图形库制作的简易射击游戏,并下载源码体验了一下之后发现存在以下缺点:1.鼠标点击之后发射的激光速度很慢,有一种很卡的感觉,影响游戏体验感。2.玩家移动过于缓慢,同样给玩家一种很卡的感觉。3.对于发射激光的图形即飞机......
  • P7424 [THUPC2017] 天天爱射击
    [THUPC2017]天天爱射击题目描述小C爱上了一款名字叫做《天天爱射击》的游戏。如图所示,这个游戏有一些平行于\(x\)轴的木板。现在有一些子弹,按顺序沿着\(y\)轴方向向这些木板射去。第\(i\)块木板被\(S_i\)个子弹贯穿以后,就会碎掉消失。一个子弹可以贯穿其弹道上的全部......