Parallax2D
2026/4/14大约 3 分钟
最后同步日期:2026-04-15 | Godot 官方原文 — Parallax2D
Parallax2D
节点继承关系
继承自 Node
| 类型 | 名称 | 说明 |
|---|---|---|
| 属性 | Name | 节点名称 |
| 属性 | ProcessMode | 处理模式(始终 / 暂停时 / 仅编辑器) |
| 属性 | ProcessPriority | 处理优先级,数字越小越先执行 |
| 信号 | ready | 节点进入场景树并准备就绪 |
| 信号 | tree_entered | 节点进入场景树 |
| 信号 | tree_exited | 节点完全离开场景树 |
| 方法 | GetNode<T>() | 按路径获取子节点 |
| 方法 | AddChild() | 添加子节点 |
| 方法 | RemoveChild() | 移除子节点 |
| 方法 | QueueFree() | 帧结束后释放节点 |
| 方法 | GetParent() | 获取父节点 |
定义
Parallax2D 是 Godot 4.x 中新增的视差滚动节点(替代旧的 ParallaxLayer)。所谓"视差滚动",就是当你移动相机时,不同层的背景以不同速度移动——近处的背景移动快,远处的背景移动慢,制造出一种"深度感"。
打个比方:你坐在行驶的火车上往外看,近处的树飞快地掠过,远处的山慢慢移动,更远的云几乎不动。这就是视差效果。Parallax2D 就是帮你实现这种效果。
简单说:它让背景以不同速度滚动,制造出深度感和空间感。
使用频率:★★★ 一般常用
节点用途
- 2D游戏背景:近景、中景、远景以不同速度滚动
- 横版卷轴:角色前进时背景自然滚动
- 深度感营造:让2D画面看起来有3D的深度
- 城市天际线:近处建筑和远处天空以不同速度移动
使用场景
| 场景 | 说明 |
|---|---|
| 2D横版游戏 | 天空层滚动最慢,山脉层中等,地面层最快 |
| 赛车游戏 | 近处路边物体移动快,远处背景移动慢 |
| 太空射击 | 近处星星移动快,远处星云移动慢 |
常用节点搭配
| 搭配节点 | 搭配方式 |
|---|---|
| Sprite2D / TextureRect | 作为 Parallax2D 的子节点,显示背景图层 |
生效必备素材/资源
Parallax2D 需要配合背景图片或 Sprite2D 子节点使用。
节点属性与信号
属性
| 属性 | 类型 | 默认值 | 继承自 | 说明 |
|---|---|---|---|---|
| scroll_scale | Vector2 | (1, 1) | Parallax2D | 滚动倍率。值越小移动越慢(看起来越远)。如 (0.5, 0.5) 表示以一半速度移动 |
| scroll_offset | Vector2 | (0, 0) | Parallax2D | 滚动偏移量 |
| repeat_size | Vector2 | (0, 0) | Parallax2D | 重复大小,设置后背景会无限平铺 |
| limit_begin | Vector2 | — | Parallax2D | 限制滚动范围的起点 |
| limit_end | Vector2 | — | Parallax2D | 限制滚动范围的终点 |
| screen_offset | Vector2 | (0, 0) | Parallax2D | 屏幕偏移量 |
| ignore_camera_scroll | bool | false | Parallax2D | 是否忽略相机滚动 |
信号
Parallax2D 没有自己的特有信号。
常用方法
Parallax2D 主要通过属性控制,没有特别需要调用的方法。
代码示例
C
// C# - 多层视差背景(代码创建)
using Godot;
public partial class ParallaxBackground2D : Node2D
{
public override void _Ready()
{
CreateParallaxLayer("Sky", 0.1f, -100); // 天空层:最慢
CreateParallaxLayer("Mountains", 0.3f, -50); // 山脉层:中等
CreateParallaxLayer("Trees", 0.6f, -30); // 树木层:较快
CreateParallaxLayer("Ground", 1.0f, 0); // 地面层:跟随相机
}
private void CreateParallaxLayer(string name, float speed, float yPos)
{
var parallax = new Parallax2D();
parallax.Name = name;
parallax.ScrollScale = new Vector2(speed, speed);
parallax.Position = new Vector2(0, yPos);
// 创建一个占位的 Sprite2D
var sprite = new Sprite2D();
sprite.Texture = GD.Load<Texture2D>($"res://assets/backgrounds/{name}.png");
parallax.AddChild(sprite);
AddChild(parallax);
}
}GDScript
# GDScript - 多层视差背景(代码创建)
extends Node2D
func _ready():
create_parallax_layer("Sky", 0.1, -100) # 天空层:最慢
create_parallax_layer("Mountains", 0.3, -50) # 山脉层:中等
create_parallax_layer("Trees", 0.6, -30) # 树木层:较快
create_parallax_layer("Ground", 1.0, 0) # 地面层:跟随相机
func create_parallax_layer(name: String, speed: float, y_pos: float):
var parallax = Parallax2D.new()
parallax.name = name
parallax.scroll_scale = Vector2(speed, speed)
parallax.position = Vector2(0, y_pos)
# 创建一个占位的 Sprite2D
var sprite = Sprite2D.new()
sprite.texture = load("res://assets/backgrounds/%s.png" % name)
parallax.add_child(sprite)
add_child(parallax)