关键词:Godot、4.2.2、2d、传输带、电梯、平台、传输平台、静止平台
前言:楼主是godot小白,还在学习中,文章仅作为笔记。如有错误,还请大佬们指出,先谢谢了。
问题:如何在godot中制作一个2d传输平台?即平台静止,但平台上的角色(或其他角色、物体)会移动,类似工厂流水线里的传输带
解决方法:
①先创建一个供角色站立的平台:StaticBody2D(平台或地面一般选这个。不要选Area2d,站不了)+CollisionShape2D(碰撞体,形状
选哪个都行,这里我用的是长方形)+Sprite2D(用于添加图片。如果你的该平台是动画,如传输带在移动,那么请选AnimatedSprite2D)
②然后创建一个角色:CharacterBody2D(玩家的角色)+CollisionShape2D(碰撞体)+Sprite2D(角色图片。如果你的角色有动画,如站立或跑步,那么请选AnimatedSprite2D)。由于创建CharacterBody2D后其本身已有代码,该角色能左右移动+跳跃,故此处不再赘述。
③在①的StaticBody2D里添加:Area2d(判断玩家是否在该区域)+CollisionShape2D(碰撞体)。在①的外面也行,但由于它属于传输平台的内容,所以最好归类放在一起。还要注意碰撞体的长度需要和①的平台相同、高度一点点就行、位置放在①的平台的上方,效果如图所示(因为想要的效果是玩家踩在传输平台上时,玩家才移动;若高度太高,玩家可能还没落在平台上时就在移动了)
④点击刚才创建的Ared2d(在屏幕左侧),再点击右上角的“节点”页签,然后分别双击body_entered(body:Node2D)和body_exited(body:Node2D),并连接到②中创建的角色CharacterBody2D(下图2里叫Player是因为我改了名而已)
⑤打开②中CharacterBody2D的脚本,现在ready方法前先定义一个bool布尔型变量:on_platform,用于判断玩家是否在该传输带上。玩家初始情况下不会在上面,所以给它一个初始值false。
⑥再定义一个SPEED,用于控制玩家在传送带上的速度,这里可以是常量(将var改为const即可)。记得为它赋值!
⑦还是刚才那个脚本,由于④的时候通过信号连接到本脚本,后续代码如下。
当玩家进入③创建的区域内时,判断为玩家在传输带上,即on_platform = true ;当玩家离开时,on_platform又变回 false
⑦然后在帧处理的方法中添加代码(func _process(delta):或func _process(delta):,它们的区别这里不展开描述,请自行百度或查看官方文档),代码如下。如果on_platform的值为true(即玩家在平台上),则改变玩家的x坐标,使其向左或向右(向左移动为减号-,向右移动为加号+)
⑧按F6运行当前场景,此时玩家跳上该移动平台后,会发现角色在平台上移动,就好像站在传输带(或电梯)上一样。
至此,一个简单的传输带功能已完成。
总结:在平台上方创建一个高度很低的区域,玩家进入该区域时修改玩家坐标的x值,使其看上去像是在传输带上移动;离开该区域后则停止修改玩家坐标。