godot4制作2D游戏17———使用物品(Part 2)
使用物品 添加拾取物品代码 inventory_data 创建新的pickup文件夹,创建item_pickup场景和脚本 需要包含Area2D,用来检测碰撞 这下面要有CollisionShape2D 需要添加sprite2D和audiooStreamPlayer2D用来展示图片和音频 item_pickup.gd 12345678910111213141516171819202122232425262728293031323334353637383940@toolclass_name ItemPickup extends Node2D@onready var area_2d: Area2D = $Area2D@onready var sprite_2d: Sprite2D = $Sprite2D@onready var audio_stream_player_2d: AudioStreamPlayer2D = $AudioStreamPlayer2D@export var item_data: ItemData : set =...
godot4制作2D游戏16———资源库(Part 1)
创建Items文件夹 创建Items文件夹用以保存相应的图片和脚本 创建脚本item_data 创建三个ItemData资源 在pause下创建inventory文件夹并创建库存样式 库存为一个按钮,里面是texture和label 如果需要键盘控制可以将他们都放在一个control里面 创建inventory_ui.gd文件 1234567891011121314151617181920212223242526272829class_name InventoryUI extends Controlconst INVENTORY_SLOT = preload("res://GUI/pause_menu/inventory/inventory_slot.tscn")@onready var pause_menu: CanvasLayer = $"../../.."@export var data: InventoryData# Called when the node enters the scene tree for the...
godot4制作2D游戏15———基础的Save和Load
基础的Save和Load功能在GUI下创建新的文件夹pause_menu 创建新的文件夹以及场景和脚本,名称都为pause_menu 创建一些节点来描述页面 Process下的mode要选择Always 将pause_menu场景加载到Autoload中 编写pause_menu.gd代码 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950extends CanvasLayer@onready var button_save: Button = $VBoxContainer/Button_Save@onready var button_load: Button = $VBoxContainer/Button_Loadvar is_paused: bool = falsefunc _ready() ->...
godot4制作2D游戏14———场景管理
创建多个关卡 每个关卡的根节点都要绑定level.gd作为脚本文件 修改level.gd 12345678910class_name Level extends Node2Dfunc _ready() -> void: self.y_sort_enabled = true PlayerManager.set_as_parent(self) passfunc _exit_tree() -> void: PlayerManager.unparent(self) queue_free() 创建场景转换Scene 创建一个新Scene,命名为level_transition 根节点改为Area2D 添加CollisionShape2D节点 取消monitorable,mask layer选择1,表示不被监控但与1层的玩家可碰撞 创建level_transition.gd脚本 ...
godot4制作2D游戏13———用户关卡配置
创建Spwan场景 创建一个新场景,只需要一张图片代表Player 添加脚本player_spawn.gd 12345678910extends Node2Dfunc _ready() -> void: visible = false if not PlayerManager.player_spawned: PlayerManager.set_player_position(global_position) PlayerManager.player_spawned = true print(global_position) pass 修改PlayerManager脚本 12345678910111213141516171819202122232425262728293031extends Nodeconst PLAYER = preload("res://Player/player.tscn")var player: Playervar player_spawned: bool = falsefunc _ready() ->...
godot4制作2D游戏12———用户界面
新建用户场景 创建一个canvasLayer节点作为新的PlayerHud场景 在下面创建一个Control节点 在Control节点下创建一个Sprite节点,导入素材 在Control下面创建一个HFlowContainer节点 在HFlowContainer节点下创建一个Control,作为HeartGUI场景 编写脚本heart_gui.gd并在其节点下添加Sprite子节点 12345678910111213class_name HeartGUI extends Control@onready var sprite: Sprite2D = $Sprite2Dvar value: int = 2 : set (_value): value = _value update_sprite()func update_sprite() -> void: sprite.frame = value pass 添加PlayerHud到AutoLoad 添加PlayerHud的脚本文件 ...
godot4制作2D游戏11———玩家眩晕状态
修改伤害传输机制 将之前damaged相关信号传入的伤害值都转为HurtBox 之后触发伤害时按照HurtBox的伤害和方向计算相关数据 玩家受伤功能 引入新的资源文件 为Player添加HitBox 创建stun动画 单独创建一个AnimationPlayer来播放闪烁特效 添加stun节点和脚本 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253class_name StateStun extends State@onready var idle: StateIdle = $"../Idle"@export var decelerate_speed: float = 10.0@export var knockback_speed: float = 200.0@export var invulnerable_duration: float = 1.0var direction: Vector2var...
godot4制作2D游戏10———创建简单敌人(二)
引入资源 将DestroySmoke、hit_00、hit_01这几个资源导入项目 添加一个HurtBox,并添加一个CollisionShape2D 创建两个新的State Stun 12345678910111213141516171819202122232425262728293031323334353637383940414243444546class_name EnemyStateStun extends EnemyState@export var anmi_name: String = "stun"@export_category("AI")@export var knockback_speed: float = 200.0@export var decelebrate_speed: float = 10.0@export var next_state: EnemyStatevar direction: Vector2var animation_finished: bool = falsefunc init() ->...
godot4制作2D游戏09———创建简单敌人(一)
创建一个敌人 新建一个Enemies文件夹 在下面创建Scripts文件夹 创建一个Slime文件夹,里面是史莱姆的相关文件 从网站下载Slime.png放入Slime文件夹 创建一个CharacterBody2D节点的场景,用来保存Slime相关的数据 在这下面创建一个Sprite2D节点,保存Slime图像 再创建一个Sprite2D节点,放置阴影 创建一个CollisionShape2D节点,自己在9层,mask为5层,可以和Wall交互 创建Slime动画 创建idle的up、down、side 创建walk的up、down、side 创建一个enemy.gd脚本,挂载到Slime节点上 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455class_name Enemy extends CharacterBody2Dsignal DirectionChanged(dir: Vector2)signal...
godot4制作2D游戏08———相机限制
创建单例模式文件 新建一个00_Global文件夹,保证一直都在最上 创建一个GlobalLevelManager脚本文件 123456789extends Nodevar current_tilemap_bounds: Array[Vector2]signal TileMapBoundsChanged(bounds: Array[Vector2])func ChangeTileMapBounds(bounds: Array[Vector2]) -> void: current_tilemap_bounds = bounds TileMapBoundsChanged.emit(bounds) 添加到AutoLoad中 创建Camera2D的脚本123456789101112131415class_name PlayerCamera extends Camera2Dfunc _ready() ->...