我们在 Godot 编辑器中按 F4 查找API,可以看到这三个节点都是直接继承于PhysicsBody2D的,说明它们都是物理节点,而PhysicsBody2D又继承于CollisionObject2D具有碰撞检测功能。另外,CollisionObject2D节点还有另外一个子类,这个子类也是我们之前提过并在游戏中应用过的Area2D节点。关于这四个节点的应用我举几个常见例子: St...
StaticBody和Area都需要一个CollisionShape,所以直接改类型就不需要重新添加CollisionShape了。 移动CharacterBody2D 现在我们还需要修改移动代码让物理系统明白发生了什么。使用了CharacterBody2D之后就不建议再继续使用修改position来实现移动的方法了。 CharacterBody2D主要有两个用来移动的方法,一个叫move_and_slide,一个叫...
所以需要一个能够一次修改地图块属性的方法,那就是Area2D来检测角色是否要进行穿越地形。 如果地形存在多个出入口,记得每个出入口都要安排上Area2D。 1.# 进口Area2D2.func _on_area_2d_body_exited(body):3.ifbody.name==c.name:4.body_exit_pos_y=body.global_position.y5.foriinget_layers_count():6...
基于Godot4.1.1 Area 基本 定义了2D区域,并且可以检测CollisionObject2D的进入、退出、重叠【进入和退出有信号检测,但是重叠没有信号,需要通过方法判断】 可以在局部修改或覆盖物理参数(重力、阻尼) 音响总线切换 覆盖覆写 Gravity重力【重力方向和重力大小】 Linear Damp 线阻尼【产生一个运动相反的力】 Angular Damp ...
接下来我们再完成炮弹部分,也是个area2d及collisionshape2d用于检测是否碰到敌人,一个sprite用于放贴图,一个GPUParticles2d用于炮弹飞行的粒子拖尾效果,最后一个timer用于飞行时长。 然后我们新建脚本用于炮台发射的基础功能,首先新建个发射的函数,通过实例化炮弹,再通过add_child放到场景,这时需要通过market的全局位置(global...
我们在 Godot 编辑器中按 F4 查找 API ,可以看到这三个节点都是直接继承于PhysicsBody2D 的,说明它们都是物理节点,而 PhysicsBody2D 又继承于CollisionObject2D 具有碰撞检测功能。另外, CollisionObject2D 节点还有另外一个子类,这个子类也是我们之前提过并在游戏中应用过的 Area2D 节点。关于这四个节点的应用我举...
点击Player节点,添加CollisionShape2D节点为子节点,调整大小覆盖整个精灵,这个节点将作为碰撞检测节点。 保存。 2. 添加玩家脚本 2.1 创建脚本 选中Player场景,点击添加脚本。 语言:GDScript 继承:Area2D(默认) 模板:默认 路径:~/script/Player.gd 2.2 声明成员变量 ...
CollisionShape的形状在启动游戏时不会显示,如果想要在游戏运行时也能看到它可以启用Debug菜单中的这一选项: 现在需要为KillArea添加脚本实现相关功能。 脚本不会太复杂,主要是连接上Area2D的body_entered信号——毕竟我们的玩家角色使用CharacterBody2D制作的。
玩家子场景是这个项目的最核心游戏元素,可以说是小游戏的灵魂所在。玩家子场景的制作非常简单:以碰撞体Area2D作为根节点,添加一个Sprite图片精灵、一个CollisionShape2D绘制碰撞区域、AnimationPlayer节点制作动画以及一个AudioStreamPlayer音频流播放节点。如果对这些节点的使用不熟悉,可以参考我之前的文章。
self.GlobalPosition.Y - Y_point); } public async void _on_area_2d_body_entered(Node2D body) { if (body.IsInGroup("Alien") && y_vel == -1 && body is Alien alien) { await ToSignal(GetTree().CreateTimer(0.1f), "timeout"); ...