### 12. Vector2 / Color(内置值类型)
Vector(中文:向量,),在godot中保存坐标或向量,在数学中,向量指具有大小和方向的量。在二维平面或三维空间中,它可以形象化地表示为带箭头的线段。与向量对应的量叫做数量,只有大小,没有方向。
Color 是按照RGBA模式进行操作的:
R->RED,G->GREEN,B->BLUE,A->ALPHA
> 配套示例:`examples/12_vector_color.gd`
GDScript 内置了一批"几何 / 颜色"类型,写代码时离不开。
#### Vector2 向量
```gdscript
var pos := Vector2(100, 50) #坐标:100表示下,50表示y
var velocity := Vector2(3, 4)
# 向量加减乘除:跟数字一样自然,x和y坐标分别各自运算
pos + velocity # Vector2(103, 54)
velocity * 2 # Vector2(6, 8)
# 方向常量(写移动代码每天都用)因为godot的坐标系设定为x轴向右为正,y轴向下为正
Vector2.ZERO # (0, 0)
Vector2.UP # (0, -1)(y 轴向下,向上是负的)
Vector2.RIGHT # (1, 0)
# 常用方法
velocity.length() # 5.0 这里涉及到向量的运算,对角线长度^2 = 边长a^2 + 边长b^2 ± 2ab*cos (θ) 其中,a和b是平行四边形的相邻边长,θ是这两边之间的夹角。 根据平行四边形的不同类型,我们可以使用这个公式的不同形式。 例如,对于矩形,θ=90°,cos (θ)=0,所以公式简化为对角线长度^2 = a^2 + b^2。 对于菱形,a=b,且对角线互相垂直,因此可以直接使用勾股定理计算。
velocity.normalized() # 单位向量(长度为 1)
pos.distance_to(target) # 两点距离
pos.direction_to(target) # 朝目标的单位向量
```
#### Color
```gdscript
var red := Color(1, 0, 0, 1) # 浮点 RGBA,每个分量 0~1
var semi_blue := Color(0, 0, 1, 0.5) # 半透明
var orange := Color("ff8000") # 十六进制字符串
var green := Color.GREEN # 命名常量
```
> 还有 `Vector3` / `Vector4` / `Rect2` / `Transform2D` 等,按需查 Godot 文档。
## 第 12 节:Vector2 / Color(内置值类型)
##
## 演示常用的 Vector2 操作和 Color 表示。
extends Node
func _ready() -> void:
demo_vector2()
demo_color()
func demo_vector2() -> void:
print("--- Vector2 ---")
# 创建
var pos := Vector2(100, 50)
var velocity := Vector2(3, 4)
print("位置:", pos) #输出:位置:(100.0, 50.0)
print("速度:", velocity) #输出:速度:(3.0, 4.0)
# 内置方向常量
print("Vector2.ZERO =", Vector2.ZERO) #输出:Vector2.ZERO =(0.0, 0.0)
print("Vector2.UP =", Vector2.UP) #输出:Vector2.UP =(0.0, -1.0)
print("Vector2.RIGHT =", Vector2.RIGHT) #输出:Vector2.RIGHT =(1.0, 0.0)
# 向量运算
var new_pos := pos + velocity
print("位置 + 速度 =", new_pos) #输出:位置 + 速度 =(103.0, 54.0)
print("速度 * 2 =", velocity * 2) #输出:速度 * 2 =(6.0, 8.0)
# 长度与单位向量
print("速度的长度:", velocity.length()) # 5.0
print("速度归一化(单位向量):", velocity.normalized())
# 距离与朝向
var a := Vector2(0, 0)
var b := Vector2(3, 4)
print("a 到 b 的距离:", a.distance_to(b)) # 5
print("a 指向 b 的单位向量:", a.direction_to(b)) # (0.6, 0.8) b-a
func demo_color() -> void:
print("--- Color ---")
# 浮点 RGBA(0~1)
var red := Color(0.276, 0.565, 0.763, 1.0)
var semi_blue := Color(0, 0, 1, 0.5)
print("纯红:", red) #输出:纯红:(1.0, 0.0, 0.0, 1.0)
print("半透明蓝:", semi_blue) #输出:半透明蓝:(0.0, 0.0, 1.0, 0.5)
# 也可以用十六进制字符串
var orange := Color("ff8000")
print("橘色:", orange) #输出:橘色:(0.0, 0.502, 0.0, 1.0)
# 命名颜色(常量)
print("Color.GREEN:", Color.GREEN) #输出:Color.GREEN:(0.0, 1.0, 0.0, 1.0)
